イメージ ギャラリーのアプリケーションでは、メディア コンテンツ プロバイダーのイメージを使用して、リサイクラー ビューを膨らませます。画像を長押しすると、その画像ファイルの名前を変更するオプションをユーザーに提供します。したがって、リサイクラー ビューの各画像の完全なファイル パス (例:- /storage/sdcard1/DCIM/100ANDRO/ak.jpg ) があります。次に、そのファイルの名前を変更したいと思います。
ここでの問題は、提供されるファイル パスが外部 SD カードのパスであるため、Android 5 以降の場合、ファイルを書き込むために SAF (Storage Access Framework) が必要になることです。
したがって、一般的に、SAF を使用してファイルの名前を変更するには、次のコードを使用します。
public void onActivityResult(int requestCode, int resultCode, Intent resultData){
if (resultCode == RESULT_OK) {
Uri treeUri = resultData.getData();
getContentResolver().takePersistableUriPermission(treeUri,
Intent.FLAG_GRANT_READ_URI_PERMISSION |
Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri);
DocumentFile newFIle = pickedDir.createFile("text/plain","MyFile")
// or rename as
pickedDir.renameTo("fdtd.jpg");
} else {
Log.d("test","NOt OK RESULT");
}
}
ただし、それは TreeUri がわかっている場合です。ここで私の場合、ファイルパスを知っているので、それを TreeUri に変換したいと考えています。