Android Image Viewer de la aplicación

Estoy intentando lanzar una imagen que se escribe en mi directorio de la aplicación con el visor incorporado de la imagen del androide. Esta imagen se ha escrito en una parte diferente de la aplicación en el directorio de la aplicación. Al obtener el siguiente archivo:

super.getFilesDir() + "/current.png"

File.exists () devuelve true.

¿Cómo puedo iniciar el visor de imágenes Android de Builtin para ver este archivo? Actualmente estoy haciendo:

 File f = new File(super.getFilesDir()+"/current.png"); uri = Uri.parse("file://"+super.getFilesDir()+"/current.png"); startActivity(new Intent(Intent.ACTION_VIEW, uri)); 

Y sigue produciendo:

10-11 13: 09: 24.367: INFO / ActivityManager (564): Actividad de inicio: Intención {act = android.intent.action.VIEW dat = archivo: ///data/data/com.davidgoemans.myapp/files/current .png} 10-11 13: 09: 24.367: ERROR / myapp (2166): Excepción occuredandroid.content.ActivityNotFoundException: Ninguna actividad encontrada para manejar Intent {act = android.intent.action.VIEW dat = file: /// data /data/com.davidgoemans.myapp/files/current.png}

Independientemente de lo que cambie el esquema uri (por ejemplo, content: //, file: //, media: //, image: //).

Una forma es implementar un proveedor de contexto para dar acceso a otras aplicaciones a sus datos.

Crear una nueva clase que contenga:

 public class FileContentProvider extends ContentProvider { private static final String URI_PREFIX = "content://uk.co.ashtonbrsc.examplefilecontentprovider"; public static String constructUri(String url) { Uri uri = Uri.parse(url); return uri.isAbsolute() ? url : URI_PREFIX + url; } @Override public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { File file = new File(uri.getPath()); ParcelFileDescriptor parcel = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY); return parcel; } @Override public boolean onCreate() { return true; } @Override public int delete(Uri uri, String s, String[] as) { throw new UnsupportedOperationException("Not supported by this provider"); } @Override public String getType(Uri uri) { throw new UnsupportedOperationException("Not supported by this provider"); } @Override public Uri insert(Uri uri, ContentValues contentvalues) { throw new UnsupportedOperationException("Not supported by this provider"); } @Override public Cursor query(Uri uri, String[] as, String s, String[] as1, String s1) { throw new UnsupportedOperationException("Not supported by this provider"); } @Override public int update(Uri uri, ContentValues contentvalues, String s, String[] as) { throw new UnsupportedOperationException("Not supported by this provider"); } } 

Agregue el proveedor de contenido a su AndroidManifest.xml:

 <provider android:name=".FileContentProvider" android:authorities="uk.co.ashtonbrsc.examplefilecontentprovider" /> 

A continuación, debería ser capaz de utilizar "content://uk.co.ashtonbrsc.examplefilecontentprovider/" + the full path to the image en su intención ACTION_VIEW.

Opción # 1: Cree un ContentProvider para publicar el archivo fuera del área de archivos privados de su aplicación, luego utilice un ACTION_VIEW Intent en ese content:// Uri .

Opción # 2: Mueva el archivo a la tarjeta SD, y use un ACTION_VIEW Intent en el Uri y también con el tipo MIME apropiado. Android no asocia automáticamente las extensiones de archivo con tipos MIME, por lo que debe indicarle al Intent qué tipo de tipo MIME indica el Uri . Esto se maneja para usted "automáticamente" con el ContentProvider .

Su imagen se encuentra dentro de su sandbox de aplicaciones, por lo que debe utilizar ContentProvider para proporcionar acceso externo a otras aplicaciones a sus datos de imagen. Tenga en cuenta que en Android, las aplicaciones preinstaladas no tienen una prioridad más alta que las aplicaciones de terceros, aún tiene que dar permiso a sus datos, incluso si desea usar las aplicaciones predeterminadas.

De lo contrario, eche un vistazo a las etiquetas IntentFilter la actividad Galería en la aplicación Cámara, para obtener una referencia a qué Intent puede utilizar para abrir una imagen con el visor predeterminado.

  • Abrir archivo adjunto .txt de correo electrónico en la aplicación para Android
  • Cómo quitar el diseño de fragmento en el inicio de la creación de una nueva aplicación en ADT?
  • Prueba de Android "ro.build.date.utc" warning
  • CameraManager en dispositivos que funcionan con menos de Lollipop
  • Las sumas de comprobación MD5 de los archivos APK de Android difieren. ¿Por qué?
  • ¿Cómo puedo descifrar la URL en la aplicación Android
  • Android studio: depurar la aplicación en el dispositivo
  • Datos de servicio web de caché de android
  • LIBGDX ¿Es mejor usar spritesheet o imágenes individuales?
  • Maven para los proyectos de Android?
  • Error en el corredor al realizar pruebas con Robolectric
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.