2016-06-18 5 views
1

Avant Android N dans mon application après avoir téléchargé un fichier que je l'ouvre comme:Ouvrir un fichier téléchargé dans Android N

Intent myIntent = new Intent(Intent.ACTION_VIEW); 
File myFile = new File(result); 
String mime = URLConnection.guessContentTypeFromStream(new FileInputStream(myFile)); 
myIntent.setDataAndType(Uri.fromFile(myFile), mime); 
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(myIntent); 

Depuis Android N si j'utilise ce code je reçois un FileUriExposedException, comme l'a suggéré here que je devrais utiliser la FileProvider et obtenir le chemin comme:

Uri contentUri = getUriForFile(getContext(), "com.mydomain.fileprovider", newFile); 

puis ouvrez-le avec:

ParcelFileDescriptor.openFile(Uri uri,String mode) 

comme suggéré here où il est dit Uri: A content URI associated with a file, as returned by getUriForFile().

Mais dans l'IDE si je ParcelfileDescriptor.open... il n'y a pas de méthode openFile() Image

seulement open() avec un fichier en tant que paramètre, et pas uri. Alors, comment puis-je ouvrir un fichier dans Android N?

Remarque: Je ne souhaite pas ouvrir un fichier avec mon application. Par exemple, si je télécharge un pdf, je veux l'ouvrir avec l'application installée sur le téléphone.

+0

[Cochez cette] (http://stackoverflow.com/a/41570845/6333971) –

Répondre

0

Depuis Android N si j'utilise ce code, je reçois un FileUriExposedException, comme le suggère ici que je devrais utiliser le FileProvider

Cette partie est correcte. Le Uri que vous obtenez de getUriForFile() puis va dans votre ACTION_VIEWIntent. Alors, vous liquidez avec quelque chose comme:

File myFile = new File(result); 
Uri uri = FileProvider.getUriForFile(context, YOUR_AUTHORITY, myFile); 
Intent myIntent = new Intent(Intent.ACTION_VIEW, uri); 
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(myIntent); 
+0

J'utilise ce code, mais son erreur SHOWS ne peux pas lire la vidéo ... Intention intention = new Intention(); intention.setAction (Intent.ACTION_VIEW); intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); intent.setDataAndType (intentUri, "video/*"); startActivity (intention); –

+0

@bdevloper: Parlez aux développeurs de l'application du lecteur vidéo. – CommonsWare

+0

Mais cela fonctionne bien en dessous de 7.0. –