2016-06-18 19 views
1

Bevor Android N in meiner app nach Herunterladen einer Datei öffne ich es mag:eine heruntergeladene Datei in 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); 

Seit Android N wenn ich diesen Code verwende ich ein FileUriExposedException bekommen, wie here schlug ich verwenden sollte die FileProvider und den Weg bekommen wie:

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

und es dann mit öffnen:

ParcelFileDescriptor.openFile(Uri uri,String mode) 

als here vorgeschlagen, wo es heißt Uri: A content URI associated with a file, as returned by getUriForFile().

Aber in dem IDE, wenn ich ParcelfileDescriptor.open... gibt es keine Methode openFile() Image

nur open() mit einer Datei als Parameter und keine uri. Also wie kann ich eine Datei in Android N öffnen?

Hinweis: Ich möchte keine Datei mit meiner Anwendung öffnen. Wenn ich beispielsweise eine PDF-Datei herunterlade, möchte ich sie mit der installierten App auf dem Telefon öffnen.

+0

[Check this] (http://stackoverflow.com/a/41570845/6333971) –

Antwort

0

Da Android N, wenn ich diesen Code, den ich ein FileUriExposedException bekommen verwenden, wie hier vorgeschlagen, dass ich die FileProvider

Dieser Teil richtig verwenden soll, ist. Die Uri, die Sie von getUriForFile() erhalten, geht dann in Ihre ACTION_VIEWIntent. So wickeln Sie sich mit so etwas wie:

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

Ich benutze diesen Code aber seine Shows Fehler kann nicht Video abspielen ... Absicht intent = new Intent(); intent.setAction (Absicht.ACTION_VIEW); intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); intention.setDataAndType (intentionUri, "video/*"); startActivity (Absicht); –

+0

@bdevloper: Sprechen Sie mit den Entwicklern der Video-Player-App. – CommonsWare

+0

Aber das funktioniert gut unter 7,0. –