【问题标题】:How to use adb shell to display a local image如何使用 adb shell 显示本地图像
【发布时间】:2013-01-03 19:56:33
【问题描述】:

我想使用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

很遗憾,我收到了这个错误:

开始:Intent { 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://”前缀):

开始:Intent { act=android.intent.action.VIEW dat=/storage/sdcard0/Android/data//files/myfile.jpg }
错误:活动未启动,无法解析 Intent { 行动=android.intent.action.VIEW dat=/storage/sdcard0/Android/data//files/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 卡,可能图像被视为应用程序数据,因此其他应用程序无法访问它?

【问题讨论】:

  • 它应该与VIEW 一起使用,而不要使用-n com.android.browser/.BrowserActivity。然后系统应该将意图解析为正确的类。
  • 这似乎对我不起作用,我已经用我看到的错误更新了问题。
  • 安装文件管理器应用程序并尝试浏览和查看它 - 应该回答权限问题。也许该文件是可访问的,但不是通过那个路径名到应用用户ID的
  • 对我有用的 - Kitkat 4.4.4 - 是adb shell am start -a android.intent.action.VIEW -d file:///storage/emulated/0/Download/foo.jpg -t image/jpeg。 dtmilano 的答案出于某种原因在 Documents 中打开。

标签: android adb


【解决方案1】:

这应该可以,但是它取决于您安装的应用程序:

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

有趣的是,如果您在 Complete action using... 中选择 图库 将不起作用,但如果您选择 裁剪图片 则有效. 也适用于 Astro Image Viewer

【讨论】:

  • 我可以看到“使用...完成操作”弹出窗口,但它总是显示“无法加载图像”。也许问题是我的路径格式(我已经尝试了很多),或者如果这是一个内部 SD 卡,那么可能权限正在阻止其他应用程序访问该文件。
  • 首先将图像文件添加到 sdcard 的根目录并验证其是否有效。然后去其他地方。
  • 在根目录启动文件是可行的,所以我猜这是一个权限问题。
  • 请注意,如果您按照此处所述明确添加 VIEW 操作,Gallery 可以正常工作:stackoverflow.com/a/24280837/671393
【解决方案2】:

我的要求最快的解决方法是从设备中提取文件并在我的本地机器上测试它:

adb pull /storage/sdcard0/Android/data/<mypackage>/files/myfile.jpg ~/Downloads

【讨论】:

    猜你喜欢
    • 2011-01-11
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 2019-03-09
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多