2016-04-28 3 views
0

Ich versuche, meine App zu verwenden, um eine Datei aus dem externen Speicher zu öffnen. Ich verwende Freigabe über Feature.verschiedene URI-Schema über verschiedene Android-Version beim Versuch, eine Datei zu öffnen

meinen Code Export

File filelocation = new File(sPath); 
Uri path = Uri.fromFile(filelocation); 
Intent emailIntent = new Intent(Intent.ACTION_SEND); 
emailIntent.setType("vnd.android.cursor.dir/email"); 

emailIntent.putExtra(Intent.EXTRA_STREAM, path); 
String mystring = ctx.getResources().getString(R.string.Import_rule); 
emailIntent.putExtra(Intent.EXTRA_TEXT, mystring); 

Importfunktion

if (Intent.ACTION_SEND.equals(in.getAction())) 
{ 
    uri = (Uri) in.getParcelableExtra(Intent.EXTRA_STREAM); 

    uri.getPath(); 

} 

Wenn ich versuche, die uri.getPath() ich sehe Unterschied in differnt Geräte-Versionen zu erhalten.

in Android 5.0 devicve:

file:///storage/emulated/0/Download/DeviceList.zip 

in Android 6.0 Gerät

content://[email protected]/external/file/1147 
  • Ich weiß nicht, warum die URI-Schema über Versionen unterscheidet?

  • Wie kann ich das beheben?

  • Können Sie mir sagen, wie ich von Inhalt lesen und speichern können als Datei

Antwort

1

Ich weiß nicht, warum die URI-Schema über Versionen unterscheidet?

content ist seit Android 1.0 ein gültiges Schema. Es ist wegen der besseren Sicherheit seit Jahren bevorzugt worden. Es wird in Zukunft extrem wichtig werden, wie Android N is beginning to ban fileUri values.

Bitte beachten Sie auch, dass Änderungen in Schemata dies wenig mit der Android OS-Version zu tun hat. Es hat mehr mit der Version der App zu tun, die Sie verwenden, um die ACTION_SENDIntent auszulösen.

Wie kann ich das lösen?

Unterstützung von beiden.

Können Sie mir sagen, wie ich von Inhalt lesen und speichern können als Datei

Use ContentResolver and openInputStream() eine InputStream erhalten auf den Inhalt zu Uri durch die spitz. Verwenden Sie anschließend Java I/O, um diese Daten in eine lokale Datei zu kopieren.

Verwandte Themen