SDカード(Android 5以降)にファイルを書き込む(および名前を変更する)方法について多くの発見があった後、Androidが提供する新しいSAFは、SDカードファイルを書き込むためにユーザーから許可を得る必要があると思います.
このファイル マネージャー アプリケーションES ファイル エクスプローラーで、最初は次のように読み取りと書き込みのアクセス許可を取得することを確認しました。
SD カードを選択すると、書き込み権限が付与されます。
同じように SAF を使用しようとしましたが、ファイルの名前を変更できませんでした。私のコード:
@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();
}
}
コードを実行した後でも、EAaccess のアクセス許可が拒否されます。