Cómo utilizar el shell de adb para mostrar una imagen local

Quiero usar adb shell para decirle a mi dispositivo que muestre una imagen en su tarjeta SD. Pensé que este comando funcionaría:

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

Lamentablemente me sale este error:

Inicio: Intención {act = android.intent.action.MAIN cmp = com.android.browser / .BrowserActivity}
Tipo de error 3
Error: la clase de actividad {com.android.browser / com.android.browser.BrowserActivity} no existe.

También intenté hacer una acción de la VIEW , y el intentar con solamente el -n o los parámetros -d .

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

Utilizar sólo el parámetro -d resulta en este error (he intentado con y sin el prefijo "file: //" en la ruta):

Inicio: Intención {act = android.intent.action.VIEW dat = / almacenamiento / sdcard0 / Android / datos // archivos / mifile.jpg}
Error: Actividad no iniciada, incapaz de resolver Intención {act = android.intent.action.VIEW dat = / storage / sdcard0 / Android / datos // archivos / myfile.jpg flg = 0x10000000}

Los permisos en el archivo son:

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

Estoy probando con un Galaxy Nexus con raíz en ejecución 4.1.1.

Actualización : he intentado la sugerencia de dtmilano, pero la herramienta Recortar da una ventana emergente "No se pudo cargar la imagen". El seguimiento de la pila de logcat es:

 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 

Me pregunto si se trata de una tarjeta SD interna, y tal vez las imágenes se tratan como datos de la aplicación, por lo que otras aplicaciones no pueden acceder a ella?

Esto debería funcionar, sin embargo depende de las aplicaciones que haya instalado:

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

Curiosamente, no funciona si selecciona Galería en acción completa utilizando … , pero funciona si selecciona Recortar imagen . También funciona con Astro Image Viewer .

La solución más rápida que tengo para mi requisito es simplemente extraer el archivo del dispositivo y probarlo en mi máquina local:

 adb pull /storage/sdcard0/Android/data/<mypackage>/files/myfile.jpg ~/Downloads 
  • Reiniciar la máquina con Android
  • Inspeccionar android sqlite y IntelliJ
  • Depuración de la base de datos sqlite en el dispositivo
  • Configurar adb en Mac OS X
  • Quiero grabar toques en mi android y reproducirlos usando adb
  • Cómo buscar un archivo con adb.exe?
  • Adb shell screencap - "permiso denegado"
  • Shell / scripts por lotes para dirigir comandos a adb shell
  • Obtener directorio sdcard por adb
  • ¿Cómo obtener el nombre (SSID) de la red WiFi conectada mediante ADB?
  • Android: evento de toque de pantalla a través de ADB
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.