Nach vielen Erkenntnissen über das Schreiben (und umbenennen) einer Datei in SD-Karte (Android 5 und höher), denke ich, die neue SAF von Android bereitgestellt werden erforderlich, um die Erlaubnis des Benutzers zum Schreiben der SD-Kartendatei zu erhalten.Android SD-Karte Schreibberechtigung mit SAF (Storage Access Framework)
Ich habe in diesem File Manger Anwendung ES Datei Explorer gesehen, dass zunächst Lese-und Schreibberechtigung der folgenden Art und Weise, wie in Bildern gezeigt.
Nach SD-Karte wählen, wird die Schreiberlaubnis erteilt.
Also auf die gleiche Weise habe ich versucht, SAF zu verwenden, aber beim Umbenennen einer Datei fehlgeschlagen. Mein Code:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rename = (Button) findViewById(R.id.rename);
startActivityForResult(new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE), 42);
}
@Override
public void onActivityResult(int requestCode,int resultCode,Intent resultData) {
if (resultCode != RESULT_OK)
return;
Uri treeUri = resultData.getData();
DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri);
grantUriPermission(getPackageName(), treeUri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
getContentResolver().takePersistableUriPermission(treeUri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
}
public void renameclick(View v) {
File ff = new File("/storage/sdcard1/try1.jpg");
try {
ff.createNewFile();
} catch (Exception e) {
Log.d("error", "creating");
e.printStackTrace();
}
}
Noch nach dem Ausführen des Codes bekomme ich EAacces-Berechtigung verweigert.
Aber wenn ich eine Datei erstellen oder umbenennen muss, öffnet SAF-Picker –
Sobald Sie den Baum-URI haben, können Sie alles tun, was Sie wollen mit den Dateien und Verzeichnissen, die es enthält. Sie müssen den Benutzer nicht jedes Mal fragen, ob 1) Sie 'takePersistableUriPermission()' verwenden und 2) Sie den URI irgendwo speichern, damit Sie ihn beim Start der Anwendung abrufen können. – bwt
ok, habe ich verstanden. Danke –