2013-01-03 25 views
5

Tôi muốn sử dụng adb shell để yêu cầu thiết bị hiển thị hình ảnh trên thẻ SD của nó. Tôi nghĩ lệnh này sẽ làm việc:Cách sử dụng vỏ adb để hiển thị hình ảnh cục bộ

adb shell am start -a android.intent.action.MAIN -n com.android.browser/.BrowserActivity -d file:///storage/sdcard0/Android/data/<mypackage>/files/myfile.jpg 

Đáng tiếc là tôi nhận được lỗi này:

Starting: Intent { act=android.intent.action.MAIN cmp=com.android.browser/.BrowserActivity }
Error type 3
Error: Activity class {com.android.browser/com.android.browser.BrowserActivity} does not exist.

Tôi cũng đã thử làm một hành động VIEW, và cố gắng với chỉ -n hoặc các thông số -d.

adb shell am start -a android.intent.action.VIEW -d file:///storage/sdcard0/Android/data/<mypackage>/files/myfile.jpg 

Chỉ sử dụng -d kết quả tham số trong lỗi này (Tôi đã thử cả hai có và không có "file: //" tiền tố trên con đường):

Starting: Intent { act=android.intent.action.VIEW dat=/storage/sdcard0/Android/data//files/myfile.jpg }
Error: Activity not started, unable to resolve Intent { act=android.intent.action.VIEW dat=/storage/sdcard0/Android/data//files/myfile.jpg flg=0x10000000 }

Các điều khoản trên các tập tin bao gồm:

-rw-rw-r-- root  sdcard_rw 198106 2013-01-02 21:29 gUD9w5.jpg 

Tôi đang thử nghiệm với Galaxy Nexus bắt nguồn từ chạy 4.1.1.

Cập nhật: Tôi đã thử đề xuất của dtmilano nhưng công cụ Crop cung cấp cửa sổ bật lên "Không thể tải hình ảnh". Dấu vết ngăn xếp từ logcat là:

ActivityManager: START {dat=file:///storage/sdcard0/Android/data/<mypackage>/Pictures/myfile.jpg typ=image/* 
    flg=0x13000000 cmp=com.google.android.gallery3d/com.android.gallery3d.app.CropImage u=0} from pid 301 
UriImage: fail to open: file:///storage/sdcard0/Android/data/<mypackage>/Pictures/myfile.jpg 
UriImage: java.io.FileNotFoundException: /storage/sdcard0/Android/data/<mypackage>/Pictures/myfile.jpg: 
    open failed: ENOENT (No such file or directory) 
UriImage: at libcore.io.IoBridge.open(IoBridge.java:416) 
UriImage: at java.io.FileInputStream.<init>(FileInputStream.java:78) 
UriImage: at java.io.FileInputStream.<init>(FileInputStream.java:105) 
UriImage: at android.content.ContentResolver.openInputStream(ContentResolver.java:445) 
UriImage: at com.android.gallery3d.data.UriImage.openOrDownloadInner(UriImage.java:98) 
UriImage: at com.android.gallery3d.data.UriImage.openFileOrDownloadTempFile(UriImage.java:78) 
UriImage: at com.android.gallery3d.data.UriImage.prepareInputFile(UriImage.java:164) 
UriImage: at com.android.gallery3d.data.UriImage.access$100(UriImage.java:40) 
UriImage: at com.android.gallery3d.data.UriImage$RegionDecoderJob.run(UriImage.java:170) 
UriImage: at com.android.gallery3d.data.UriImage$RegionDecoderJob.run(UriImage.java:168) 
UriImage: at com.android.gallery3d.app.CropImage$LoadDataTask.run(CropImage.java:921) 
UriImage: at com.android.gallery3d.app.CropImage$LoadDataTask.run(CropImage.java:913) 
UriImage: at com.android.gallery3d.util.ThreadPool$Worker.run(ThreadPool.java:124) 
UriImage: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
UriImage: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
UriImage: at java.lang.Thread.run(Thread.java:856) 
UriImage: at com.android.gallery3d.util.PriorityThreadFactory$1.run(PriorityThreadFactory.java:43) 
UriImage: Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory) 
UriImage: at libcore.io.Posix.open(Native Method) 
UriImage: at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110) 
UriImage: at libcore.io.IoBridge.open(IoBridge.java:400) 
UriImage: ... 16 more 

Tôi tự hỏi đây có phải là thẻ SD bên trong không?

+0

Nó sẽ hoạt động với 'VIEW' và rời khỏi' -n com.android.browser/.BrowserActivity'. Hệ thống sau đó sẽ giải quyết ý định đến đúng lớp. – iagreen

+0

Điều đó dường như không hiệu quả đối với tôi, tôi đã cập nhật câu hỏi với lỗi mà tôi thấy. –

+0

Cài đặt ứng dụng trình quản lý tệp và cố gắng duyệt qua và xem ứng dụng đó - hãy trả lời câu hỏi quyền. Có thể tệp có thể truy cập được, nhưng không phải bằng tên đường dẫn * đó cho ứng dụng của userid *. –

Trả lời

6

này nên làm việc, tuy nhiên nó phụ thuộc vào ứng dụng bạn đã cài đặt:

$ adb shell am start -t image/* -d file:///mnt/sdcard/myfile.jpg 

thú vị, nó không hoạt động nếu bạn chọn Gallery trong Hoàn tất tác vụ sử dụng ..., nhưng hoạt động nếu bạn chọn Cắt ảnh. Cũng hoạt động với Trình xem ảnh Astro.

+0

hoặc sử dụng -t "hình ảnh/*" vì mã được đăng là jpg. – iagreen

+0

Tôi có thể nhận được như xa như nhìn thấy "Hoàn thành hành động sử dụng ..." popup, nhưng nó luôn luôn nói "Không thể tải hình ảnh". Có lẽ vấn đề là định dạng đường dẫn của tôi (tôi đã thử rất nhiều), hoặc nếu đây là một thẻ SD nội bộ, thì có thể các điều khoản đang ngăn các ứng dụng khác truy cập vào tệp. –

+0

Bắt đầu bằng cách thêm tệp hình ảnh vào thư mục gốc của sdcard và xác minh rằng nó hoạt động. Sau đó đi đến vị trí khác. –

2

Cách giải quyết nhanh nhất tôi có cho yêu cầu của tôi là chỉ cần kéo các tập tin ra khỏi thiết bị và thử nghiệm nó trên máy tính địa phương của tôi:

adb pull /storage/sdcard0/Android/data/<mypackage>/files/myfile.jpg ~/Downloads 
Các vấn đề liên quan