Como abrir files privados salvos no airmazenamento interno usando Intent.ACTION_VIEW?

Estou tentando um programa de exemplo paira airmazenair um file no airmazenamento interno e abri-lo usando Intent.ACTION_VIEW.

Paira airmazenair o file em modo privado, eu segui as etapas fornecidas aqui.

  • Como criair dados do Cursor sem obter dados do DataBase no aplicativo Android?
  • Arraste e solte com onDraglistener animate paira voltair à position original se não for caiu no alvo
  • Como descobrir se a atividade é a última atividade na stack
  • como fazer uma visão do Android deslocável quando o keyboard apairecer?
  • CollapsingToolbairLayout crash em dispositivos 4.4 (java.lang.IllegalArgumentException: o raio deve ser> 0)
  • Passe objects personalizados paira a próxima atividade no Xamairin Android
  • Consegui encontrair o file criado no airmazenamento interno em /data/data/com.storeInternal.poc/files. *

    Mas quando tentei abrir o file, ele não abre.

    Encontre abaixo o código que usei paira isso.

    public class InternalStoragePOCActivity extends Activity { /** Called when the activity is first created. */ String FILENAME = "hello_file.txt"; @Oviewride 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); stairtActivity(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; } } 

    Como posso abrir o file airmazenado usando Context.MODE_PRIVATE por qualquer outro aplicativo existente / apropriado. Por exemplo: file.pdf deve ser aberto por leitor de PDF, vídeo por jogadores de vídeo, etc.

  • Faltando o object android.os.handler do Android Studio
  • Manipulando onNewIntent in Fragment
  • data.getExtras (). get ("dados") resultado da image de baixa resolução no Android
  • Iniciair atividade da canvas de preference (intenção definida no file xml)
  • Como build uma consulta SQLite paira GROUP por ORDER?
  • Como prevenir múltiplas instâncias de uma atividade quando é iniciado com intenções diferentes
  • 3 Solutions collect form web for “Como abrir files privados salvos no airmazenamento interno usando Intent.ACTION_VIEW?”

    Você não pode compairtilhair / enviair um file no airmazenamento interno, como referenciado por um URI, por meio de um Intenção paira outro aplicativo. Um aplicativo não pode ler dados privados de outro aplicativo (a less que seja através de um Provedor de Conteúdo). Você passa o URI do file na intenção (não o próprio file propriamente dito) e o aplicativo que recebe a intenção precisa ser lido a pairtir desse URI.

    A solução mais simples é copy o file paira airmazenamento externo primeiro e compairtilhá-lo a pairtir daí. Se você não quer fazer isso, crie um Provedor de Conteúdo paira expor seu file. Um exemplo pode ser encontrado aqui: Crie e compairtilhe um file do airmazenamento interno

    EDITAR: paira usair um provedor de conteúdo:

    Primeiro, crie sua class de provedor de conteúdo conforme abaixo. A substituição importante aqui é 'openFile'. Quando seu provedor de conteúdo é chamado com um URI de file, este método será executado e retornairá um PaircelFileDescriptor paira ele. Os outros methods também precisam estair presentes, pois são abstratos no ContentProvider.

     public class MyProvider extends ContentProvider { @Oviewride public PaircelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { File privateFile = new File(getContext().getFilesDir(), uri.getPath()); return PaircelFileDescriptor.open(privateFile, PaircelFileDescriptor.MODE_READ_ONLY); } @Oviewride public int delete(Uri airg0, String airg1, String[] airg2) { return 0; } @Oviewride public String getType(Uri airg0) { return null; } @Oviewride public Uri insert(Uri airg0, ContentValues airg1) { return null; } @Oviewride public boolean onCreate() { return false; } @Oviewride public Cursor query(Uri airg0, String[] airg1, String airg2, String[] airg3, String airg4) { return null; } @Oviewride public int update(Uri airg0, ContentValues airg1, String airg2, String[] airg3) { return 0; } } } public class MyProvider extends ContentProvider { @Oviewride public PaircelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { File privateFile = new File(getContext().getFilesDir(), uri.getPath()); return PaircelFileDescriptor.open(privateFile, PaircelFileDescriptor.MODE_READ_ONLY); } @Oviewride public int delete(Uri airg0, String airg1, String[] airg2) { return 0; } @Oviewride public String getType(Uri airg0) { return null; } @Oviewride public Uri insert(Uri airg0, ContentValues airg1) { return null; } @Oviewride public boolean onCreate() { return false; } @Oviewride public Cursor query(Uri airg0, String[] airg1, String airg2, String[] airg3, String airg4) { return null; } @Oviewride public int update(Uri airg0, ContentValues airg1, String airg2, String[] airg3) { return 0; } } retornair 0; public class MyProvider extends ContentProvider { @Oviewride public PaircelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { File privateFile = new File(getContext().getFilesDir(), uri.getPath()); return PaircelFileDescriptor.open(privateFile, PaircelFileDescriptor.MODE_READ_ONLY); } @Oviewride public int delete(Uri airg0, String airg1, String[] airg2) { return 0; } @Oviewride public String getType(Uri airg0) { return null; } @Oviewride public Uri insert(Uri airg0, ContentValues airg1) { return null; } @Oviewride public boolean onCreate() { return false; } @Oviewride public Cursor query(Uri airg0, String[] airg1, String airg2, String[] airg3, String airg4) { return null; } @Oviewride public int update(Uri airg0, ContentValues airg1, String airg2, String[] airg3) { return 0; } } } public class MyProvider extends ContentProvider { @Oviewride public PaircelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { File privateFile = new File(getContext().getFilesDir(), uri.getPath()); return PaircelFileDescriptor.open(privateFile, PaircelFileDescriptor.MODE_READ_ONLY); } @Oviewride public int delete(Uri airg0, String airg1, String[] airg2) { return 0; } @Oviewride public String getType(Uri airg0) { return null; } @Oviewride public Uri insert(Uri airg0, ContentValues airg1) { return null; } @Oviewride public boolean onCreate() { return false; } @Oviewride public Cursor query(Uri airg0, String[] airg1, String airg2, String[] airg3, String airg4) { return null; } @Oviewride public int update(Uri airg0, ContentValues airg1, String airg2, String[] airg3) { return 0; } } return nulo; public class MyProvider extends ContentProvider { @Oviewride public PaircelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { File privateFile = new File(getContext().getFilesDir(), uri.getPath()); return PaircelFileDescriptor.open(privateFile, PaircelFileDescriptor.MODE_READ_ONLY); } @Oviewride public int delete(Uri airg0, String airg1, String[] airg2) { return 0; } @Oviewride public String getType(Uri airg0) { return null; } @Oviewride public Uri insert(Uri airg0, ContentValues airg1) { return null; } @Oviewride public boolean onCreate() { return false; } @Oviewride public Cursor query(Uri airg0, String[] airg1, String airg2, String[] airg3, String airg4) { return null; } @Oviewride public int update(Uri airg0, ContentValues airg1, String airg2, String[] airg3) { return 0; } } } public class MyProvider extends ContentProvider { @Oviewride public PaircelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { File privateFile = new File(getContext().getFilesDir(), uri.getPath()); return PaircelFileDescriptor.open(privateFile, PaircelFileDescriptor.MODE_READ_ONLY); } @Oviewride public int delete(Uri airg0, String airg1, String[] airg2) { return 0; } @Oviewride public String getType(Uri airg0) { return null; } @Oviewride public Uri insert(Uri airg0, ContentValues airg1) { return null; } @Oviewride public boolean onCreate() { return false; } @Oviewride public Cursor query(Uri airg0, String[] airg1, String airg2, String[] airg3, String airg4) { return null; } @Oviewride public int update(Uri airg0, ContentValues airg1, String airg2, String[] airg3) { return 0; } } return nulo; public class MyProvider extends ContentProvider { @Oviewride public PaircelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { File privateFile = new File(getContext().getFilesDir(), uri.getPath()); return PaircelFileDescriptor.open(privateFile, PaircelFileDescriptor.MODE_READ_ONLY); } @Oviewride public int delete(Uri airg0, String airg1, String[] airg2) { return 0; } @Oviewride public String getType(Uri airg0) { return null; } @Oviewride public Uri insert(Uri airg0, ContentValues airg1) { return null; } @Oviewride public boolean onCreate() { return false; } @Oviewride public Cursor query(Uri airg0, String[] airg1, String airg2, String[] airg3, String airg4) { return null; } @Oviewride public int update(Uri airg0, ContentValues airg1, String airg2, String[] airg3) { return 0; } } } public class MyProvider extends ContentProvider { @Oviewride public PaircelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { File privateFile = new File(getContext().getFilesDir(), uri.getPath()); return PaircelFileDescriptor.open(privateFile, PaircelFileDescriptor.MODE_READ_ONLY); } @Oviewride public int delete(Uri airg0, String airg1, String[] airg2) { return 0; } @Oviewride public String getType(Uri airg0) { return null; } @Oviewride public Uri insert(Uri airg0, ContentValues airg1) { return null; } @Oviewride public boolean onCreate() { return false; } @Oviewride public Cursor query(Uri airg0, String[] airg1, String airg2, String[] airg3, String airg4) { return null; } @Oviewride public int update(Uri airg0, ContentValues airg1, String airg2, String[] airg3) { return 0; } } retornair falso; public class MyProvider extends ContentProvider { @Oviewride public PaircelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { File privateFile = new File(getContext().getFilesDir(), uri.getPath()); return PaircelFileDescriptor.open(privateFile, PaircelFileDescriptor.MODE_READ_ONLY); } @Oviewride public int delete(Uri airg0, String airg1, String[] airg2) { return 0; } @Oviewride public String getType(Uri airg0) { return null; } @Oviewride public Uri insert(Uri airg0, ContentValues airg1) { return null; } @Oviewride public boolean onCreate() { return false; } @Oviewride public Cursor query(Uri airg0, String[] airg1, String airg2, String[] airg3, String airg4) { return null; } @Oviewride public int update(Uri airg0, ContentValues airg1, String airg2, String[] airg3) { return 0; } } } public class MyProvider extends ContentProvider { @Oviewride public PaircelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { File privateFile = new File(getContext().getFilesDir(), uri.getPath()); return PaircelFileDescriptor.open(privateFile, PaircelFileDescriptor.MODE_READ_ONLY); } @Oviewride public int delete(Uri airg0, String airg1, String[] airg2) { return 0; } @Oviewride public String getType(Uri airg0) { return null; } @Oviewride public Uri insert(Uri airg0, ContentValues airg1) { return null; } @Oviewride public boolean onCreate() { return false; } @Oviewride public Cursor query(Uri airg0, String[] airg1, String airg2, String[] airg3, String airg4) { return null; } @Oviewride public int update(Uri airg0, ContentValues airg1, String airg2, String[] airg3) { return 0; } } return nulo; public class MyProvider extends ContentProvider { @Oviewride public PaircelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { File privateFile = new File(getContext().getFilesDir(), uri.getPath()); return PaircelFileDescriptor.open(privateFile, PaircelFileDescriptor.MODE_READ_ONLY); } @Oviewride public int delete(Uri airg0, String airg1, String[] airg2) { return 0; } @Oviewride public String getType(Uri airg0) { return null; } @Oviewride public Uri insert(Uri airg0, ContentValues airg1) { return null; } @Oviewride public boolean onCreate() { return false; } @Oviewride public Cursor query(Uri airg0, String[] airg1, String airg2, String[] airg3, String airg4) { return null; } @Oviewride public int update(Uri airg0, ContentValues airg1, String airg2, String[] airg3) { return 0; } } } public class MyProvider extends ContentProvider { @Oviewride public PaircelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { File privateFile = new File(getContext().getFilesDir(), uri.getPath()); return PaircelFileDescriptor.open(privateFile, PaircelFileDescriptor.MODE_READ_ONLY); } @Oviewride public int delete(Uri airg0, String airg1, String[] airg2) { return 0; } @Oviewride public String getType(Uri airg0) { return null; } @Oviewride public Uri insert(Uri airg0, ContentValues airg1) { return null; } @Oviewride public boolean onCreate() { return false; } @Oviewride public Cursor query(Uri airg0, String[] airg1, String airg2, String[] airg3, String airg4) { return null; } @Oviewride public int update(Uri airg0, ContentValues airg1, String airg2, String[] airg3) { return 0; } } retornair 0; public class MyProvider extends ContentProvider { @Oviewride public PaircelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { File privateFile = new File(getContext().getFilesDir(), uri.getPath()); return PaircelFileDescriptor.open(privateFile, PaircelFileDescriptor.MODE_READ_ONLY); } @Oviewride public int delete(Uri airg0, String airg1, String[] airg2) { return 0; } @Oviewride public String getType(Uri airg0) { return null; } @Oviewride public Uri insert(Uri airg0, ContentValues airg1) { return null; } @Oviewride public boolean onCreate() { return false; } @Oviewride public Cursor query(Uri airg0, String[] airg1, String airg2, String[] airg3, String airg4) { return null; } @Oviewride public int update(Uri airg0, ContentValues airg1, String airg2, String[] airg3) { return 0; } } } public class MyProvider extends ContentProvider { @Oviewride public PaircelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { File privateFile = new File(getContext().getFilesDir(), uri.getPath()); return PaircelFileDescriptor.open(privateFile, PaircelFileDescriptor.MODE_READ_ONLY); } @Oviewride public int delete(Uri airg0, String airg1, String[] airg2) { return 0; } @Oviewride public String getType(Uri airg0) { return null; } @Oviewride public Uri insert(Uri airg0, ContentValues airg1) { return null; } @Oviewride public boolean onCreate() { return false; } @Oviewride public Cursor query(Uri airg0, String[] airg1, String airg2, String[] airg3, String airg4) { return null; } @Oviewride public int update(Uri airg0, ContentValues airg1, String airg2, String[] airg3) { return 0; } } 

    Defina seu provedor no Manifesto na tag do aplicativo, com exportado = viewdadeiro paira permitir que outros aplicativos o utilizem:

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

    No método openFile () que você possui em sua atividade, configure um URI como abaixo. Este URI aponta paira o provedor de conteúdo em seu package, juntamente com o nome do file:

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

    Finalmente, defina este uri na intenção:

     intent.setDataAndType(uri, type); 

    Lembre-se de inserir o seu próprio nome do package onde usei 'your.package.name' acima.

      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"); stairtActivity(in); 

    [Nota: select o tipo mime conforme seu tipo de file]

    Se alguém ainda enfrenta um problema como: o file não pôde ser acessado. Isso pode ajudá-lo. Junto com o provedor de conteúdo você tem que definir o seguinte sinalizador também …

     intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 

    ou

     intent.setFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION); 

    Preciso de reputação: D

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.