AndroidでUriでファイルの情報をやりとりするのですが、
実際のFileパスを使用したい場合あるとおもいます。
そういう時に、どうしたらいいかを調べた内容です。
普通にUriからgetPathメソッドでPathを取得すると、
「/external/images/media/401」
のような形でパスの内容が取得されます。
これを実際のファイルパスである、
「/mnt/sdcard/Test_20111101_145318.jpg」
のような形で取得する為には、「ContentResolver」を使用する必要があります。
Uriからファイルパスを取得する実際の処理は以下のようになります。
/**
* UriからPathへの変換処理
* @param uri
* @return String
*/
public static String getPath(Context context, Uri uri) {
ContentResolver contentResolver = context.getContentResolver();
String[] columns = { MediaStore.Images.Media.DATA };
Cursor cursor = contentResolver.query(uri, columns, null, null, null);
cursor.moveToFirst();
String path = cursor.getString(0);
cursor.close();
return path;
}
これで、ファイルパスが取得できます。
これで、実際のファイルパスを使用して、ファイルの削除、コピー、移動などができます。
もしかするとこんなことしなくてもUriを使用するだけで、本当は出来るような気はするのですが、
やり方が分からなかったので、実際のファイルパスを取得してしまいました。
うまいやり方が他にあったら教えて頂けたらとおもいます。