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"
- Diferencia entre JSONObject y JSONArray
- No pasar nada a un AsyncTask en Android
- Soporte múltiple de apk para Android TV y teléfono
- Android, "Error en un archivo XML: aborting build."
- Diferencia entre NativeCameraView y JavaCameraView en OpenCV
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: //).
- Interfaces de actividad de Android para fragmentos: try / catch bloques vs. instancia de cheques
- ¿Por qué eclipsar mi textura con el color?
- Captura de doble taps en Android
- No se puede resolver el método getMap ()
- La aplicación Bluetooth no funciona en dispositivos que se ejecutan en Lollipop
- Qué tan grande es la resolución de la pantalla con el desarrollo de Android
- MotionEvent.ACTION_UP no funciona
- Animar el ángulo de barrido de Android Ring Shape
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.
- Variaciones de rango de ibeacon de Radius Networks
- Cómo colocar un centro de AdMob ads en la parte inferior de la pantalla? (Uso de código java para colocar.)