2013-01-03 28 views
5

adb shellを使用して、デバイスにSDカードに画像を表示するように指示します。私は、このコマンドが働くだろうと思った:adbシェルを使用してローカル画像を表示する方法

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

残念ながら、私はこのエラーを取得する:

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.

私もVIEWアクションをやってみました、とだけ-nまたは-dパラメータでしよう。このエラーでのみ-dパラメータ結果を使用して

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

(私はとして、「ファイル://」なしの両方試してみましたプレフィックスパス上):ファイルの

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 }

権限は以下のとおりです。

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

実行中のGalaxy Nexus 4.1.1でテストしています。

更新:私は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

これは 'VIEW'で動作し、' -n com.android.browser/.BrowserActivity'を残すべきです。次に、インテントを正しいクラスに解決する必要があります。 – iagreen

+0

それは私のために働かないようでした、私は私が見るエラーで質問を更新しました。 –

+0

ファイルマネージャーアプリケーションをインストールし、そのファイルを参照して表示するようにしてください。許可の質問に答える必要があります。おそらくそのファイルはアクセス可能ですが、そのパス名ではなく* appのユーザーIDの*になります。 –

答えて

6

これは動作するはずです、しかし、それはあなたがインストールしたアプリケーションに依存します:

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

興味深いことに、それはあなたが...を使用して完全なアクションでギャラリーを選択した場合は動作しますが、あなたはを選択した場合に動作しません。クロップ画像アストロ画像ビューアでも動作します。

+0

または投稿されたコードがjpgであるため、-t "image/*"を使用してください。 – iagreen

+0

私は「Complete action using ...」ポップアップを見る限りではありますが、常に「画像を読み込めませんでした」と表示されます。おそらく問題は私のパス形式(私はたくさん試しました)です。これが内部のSDカードならば、アクセス権によって他のアプリケーションがファイルにアクセスしていない可能性があります。 –

+0

まず、イメージファイルをsdcardのルートディレクトリに追加し、それが機能することを確認します。その後、他の場所に行く。 –

2

私の要件のために、私が持っている最速の回避策は、単にデバイスをオフファイルを引っ張って、私のローカルマシン上でそれをテストすることです:

adb pull /storage/sdcard0/Android/data/<mypackage>/files/myfile.jpg ~/Downloads 
関連する問題