我想使用adb shell
告诉我的设备在其SD卡上显示图像。我以为这个命令会起作用:
adb shell am start -a android.intent.action.MAIN -n com.android.browser/.BrowserActivity -d file:///storage/sdcard0/Android/data/<mypackage>/files/myfile.jpg
不幸的是我收到了这个错误:
开始:意图{act = android.intent.action.MAIN cmp = com.android.browser / .BrowserActivity}
错误类型3
错误:活动类 {com.android.browser / com.android.browser.BrowserActivity}没有 存在。
我还尝试执行VIEW
操作,只尝试使用-n
或-d
参数。
adb shell am start -a android.intent.action.VIEW -d file:///storage/sdcard0/Android/data/<mypackage>/files/myfile.jpg
仅使用-d
参数会导致此错误(我尝试使用和不使用路径上的“file://”前缀):
开始:意图{act = android.intent.action.VIEW DAT = /存储/ sdcard0 / Android设备/数据文件// / myfile.jpg }
错误:活动未启动,无法解析Intent { ACT = android.intent.action.VIEW DAT = /存储/ sdcard0 / Android设备/数据文件// / myfile.jpg flg = 0x10000000}
该文件的权限是:
-rw-rw-r-- root sdcard_rw 198106 2013-01-02 21:29 gUD9w5.jpg
我正在使用运行4.1.1的扎根Galaxy Nexus进行测试。
更新:我尝试了dtmilano的建议,但裁剪工具提供了“无法加载图片”弹出窗口。来自logcat的堆栈跟踪是:
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
我想知道这是不是内部SD卡,也许这些图片被视为应用程序数据,因此其他应用程序无法访问它?
答案 0 :(得分:6)
这应该可行,但它取决于您安装的应用程序:
$ adb shell am start -t image/* -d file:///mnt/sdcard/myfile.jpg
有趣的是,如果您在使用... 的完整操作中选择图库,它将无效,但如果您选择裁剪图片,则无效。 也适用于 Astro图像查看器。
答案 1 :(得分:1)
我对我的要求最快的解决方法是将文件从设备中拉出并在我的本地计算机上进行测试:
adb pull /storage/sdcard0/Android/data/<mypackage>/files/myfile.jpg ~/Downloads