Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo abrir archivos privados guardados en el almacenamiento interno mediante Intent.ACTION_VIEW?

Estoy probando un programa de ejemplo para almacenar un archivo en el almacenamiento interno y abrirlo con Intent.ACTION_VIEW.

Para almacenar el archivo en modo privado, seguí los pasos que se proporcionan aquí.

  • ¿Cómo eliminar un repositorio y agregar uno nuevo en Android Studio?
  • Android: la pregunta del principiante de layout_weight
  • Declaración de atributos elegibles en Android
  • ¿Cómo establecer la visibilidad de un grupo de menús de la barra de acciones?
  • GridView - a veces las filas están alineadas en la parte superior, a veces están alineadas en la parte inferior.
  • ¿Cómo hacer que Alarm Manager funcione cuando Android 6.0 en modo Doze?
  • Pude encontrar el archivo creado en el almacenamiento interno en /data/data/com.storeInternal.poc/files. *

    Pero cuando traté de abrir el archivo, no se abre.

    A continuación, encontrará el código que utilicé para ello.

    public class InternalStoragePOCActivity extends Activity { /** Called when the activity is first created. */ String FILENAME = "hello_file.txt"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); createFile(); openFile(FILENAME); } public FileOutputStream getStream(String path) throws FileNotFoundException { return openFileOutput(path, Context.MODE_PRIVATE); } public void createFile(){ String string = "hello world!"; FileOutputStream fout = null; try { //getting output stream fout = getStream(FILENAME); //writng data fout.write(string.getBytes()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ if(fout!=null){ //closing the output stream try { fout.close(); } catch (IOException e) { e.printStackTrace(); } } } } public void openFile(String filePath) { try { File temp_file = new File(filePath); Uri data = Uri.fromFile(temp_file); String type = getMimeType(data.toString()); Intent intent = new Intent(android.content.Intent.ACTION_VIEW); intent.setDataAndType(data, type); startActivity(intent); } catch (Exception e) { Log.d("Internal Storage POC ", "No Supported Application found to open this file"); e.printStackTrace(); } } public static String getMimeType(String url) { String type = null; String extension = MimeTypeMap.getFileExtensionFromUrl(url); if (extension != null) { MimeTypeMap mime = MimeTypeMap.getSingleton(); type = mime.getMimeTypeFromExtension(extension); } return type; } } 

    ¿Cómo puedo abrir el archivo almacenado usando Context.MODE_PRIVATE por cualquier otra aplicación existente / apropiada. Por ejemplo: archivo.pdf debe ser abierto por lector de PDF, video por reproductores de video, etc.

  • Recursos de cadenas y imágenes sin usar en Android
  • BLE en Nexus 7 (ME370T) con android 4.4.2
  • ¿Cómo devolver el resultado "de una manera natural" cuando se llama la llamada Actividad?
  • ¿Cómo puedo especificar diferentes diseños para orientaciones de retrato y de paisaje?
  • StrictModeDiskReadViolation cuando
  • Diferencia entre getInfoWindow () y getInfoContents () en Googlemaps v2 para Android
  • 3 Solutions collect form web for “Cómo abrir archivos privados guardados en el almacenamiento interno mediante Intent.ACTION_VIEW?”

    No puede compartir / enviar un archivo en el almacenamiento interno, como se hace referencia en un URI, a través de un intento a otra aplicación. Una aplicación no puede leer los datos privados de otra aplicación (a menos que sea a través de un proveedor de contenido). Usted pasa la URI del archivo en la intención (no el propio archivo en sí) y la aplicación que recibe la intención debe ser capaz de leer de ese URI.

    La solución más simple es copiar primero el archivo al almacenamiento externo y compartirlo desde allí. Si no desea hacerlo, cree un proveedor de contenido para exponer su archivo. Un ejemplo se puede encontrar aquí: Crear y compartir un archivo desde el almacenamiento interno

    EDIT: Para usar un proveedor de contenido:

    Primero crea tu clase de proveedor de contenido como se muestra a continuación. La anulación importante aquí es 'openFile'. Cuando su proveedor de contenido se llama con un archivo URI, este método se ejecutará y devolverá un ParcelFileDescriptor para ello. Los otros métodos también deben estar presentes ya que son abstractos en ContentProvider.

     public class MyProvider extends ContentProvider { @Override public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { File privateFile = new File(getContext().getFilesDir(), uri.getPath()); return ParcelFileDescriptor.open(privateFile, ParcelFileDescriptor.MODE_READ_ONLY); } @Override public int delete(Uri arg0, String arg1, String[] arg2) { return 0; } @Override public String getType(Uri arg0) { return null; } @Override public Uri insert(Uri arg0, ContentValues arg1) { return null; } @Override public boolean onCreate() { return false; } @Override public Cursor query(Uri arg0, String[] arg1, String arg2, String[] arg3, String arg4) { return null; } @Override public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) { return 0; } } 

    Defina su proveedor en el Manifiesto dentro de la etiqueta de la aplicación, con exportado = true para permitir que otras aplicaciones lo utilicen:

     <provider android:name=".MyProvider" android:authorities="your.package.name" android:exported="true" /> 

    En el método openFile () que tiene en su actividad, configure un URI como se muestra a continuación. Este URI señala al proveedor de contenido en su paquete junto con el nombre de archivo:

     Uri uri = Uri.parse("content://your.package.name/" + filePath); 

    Finalmente, establezca este uri en la intención:

     intent.setDataAndType(uri, type); 

    Recuerde insertar su propio nombre de paquete donde he usado "your.package.name" arriba.

      File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "Foder path" + "/" + "File Name"); Uri uri = Uri.fromFile(file); Intent in = new Intent(Intent.ACTION_VIEW); in.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); in.setDataAndType(uri, "mime type"); startActivity(in); 

    [Nota: seleccione el tipo mime según su tipo de archivo]

    Si alguien todavía se enfrenta a un problema como: el archivo no se puede acceder. Esto podría ayudar u. Junto con el proveedor de contenido u tiene que establecer el siguiente indicador también …

     intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 

    o

     intent.setFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION); 

    Necesito reputación plz: D

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.