2013-06-05 35 views
5

Tôi cần nhận đường dẫn tệp tuyệt đối bằng cách sử dụng bộ mô tả tệp được trả về bởi getFileDescriptor(). Tôi có thể làm như thế nào?Cách lấy đường dẫn tệp bằng cách sử dụng bộ mô tả tệp trên Android?

+0

Ý tưởng hay để điều tra các tệp thiết bị USB đó! Nếu bạn xây dựng một gói gỡ lỗi, bạn có thể sử dụng adb shell 'run-as your.package.name' để lấy shell làm userid của ứng dụng và sau đó trong khi nó đang chạy sử dụng ls -l từ shell đó trên các mục/proc của ứng dụng để kiểm tra các liên kết fd, thay vì phải tìm ra cách làm như vậy từ java. –

Trả lời

2

Trên một hệ thống chạy dưới một hạt nhân Linux, đó sẽ là tất cả hiện triển khai Android, mỗi bộ mô tả tập tin sẽ có một mục trong /proc/[processid]/fd mà là một liên kết tượng trưng đến mục tiêu của bộ mô tả tập tin - không chỉ cho các tập tin thường xuyên , nhưng cũng cho nhiều mục tiêu có thể khác như đường ống và ổ cắm.

Dưới đây là một ví dụ một phần cho một cat > /mnt/sdcard/foo quá trình đang chạy trên một thiết bị Android

$ ls -l /proc/3528/fd 
lrwx------ shell shell    2013-06-06 10:31 0 -> /dev/pts/1 
l-wx------ shell shell    2013-06-06 10:31 1 -> /mnt/sdcard/foo 
lrwx------ shell shell    2013-06-06 10:31 2 -> /dev/pts/1 
lrwx------ shell shell    2013-06-06 10:31 6 -> socket:[188850] 

Reading liên kết tượng trưng trong Java "là trái như một bài tập cho người đọc". Trên một máy tính để bàn, có công cụ lsof trolls thông qua các thư mục này cho tất cả các quá trình và đổ ra một danh sách các tập tin mở - tuy nhiên, điều đó sẽ không quá hữu ích trên Android, nơi việc sử dụng của mỗi người dùng ứng dụng sẽ hạn chế như trolling. Nhưng bạn vẫn có thể tra cứu fd thuộc về ứng dụng của bạn, hoặc bất kỳ quá trình nào khác đang chạy trong cùng một userid.

Các vấn đề liên quan