8

adb shellSDカードに画像を表示するようにデバイスに指示するために使用したいと思います。私はこのコマンドが機能すると思いました:

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 = / storage / sdcard0 / Android / data // files / myfile.jpg}
エラー:アクティビティが開始されていません。インテントを解決できません{act=android.intent.action。表示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を実行しているroot化されたGalaxyNexusでテストしています。

更新: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カードなのか、画像がアプリケーションデータとして扱われているので、他のアプリがアクセスできないのではないかと思います。

4

2 に答える 2

11

これは機能するはずですが、インストールしたアプリによって異なります。

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

興味深いことに、 ...を使用して[完全なアクションギャラリー]を選択した場合は機能しませんが、[画像を切り抜く]を選択した場合は機能します。AstroImageViewerでも動作します。

于 2013-01-03T21:30:17.873 に答える
3

要件に対する最も簡単な回避策は、ファイルをデバイスから取り出して、ローカルマシンでテストすることです。

adb pull /storage/sdcard0/Android/data/<mypackage>/files/myfile.jpg ~/Downloads
于 2013-01-03T20:34:15.780 に答える