私のAndroidアプリは画像を開いて操作します。ファイル、ギャラリー、など私が望む画像を開いているときにAndroidの異なるソースからURIを解決する
:
これを行うにはIntent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,
"Complete action using"),
PICK_FROM_FILE);
、それはESファイルエクスプローラのように、3〜4オプションのダイアログを起動します:My活動は、次のようにイメージを開くことを要求しますBitmapFactory.decodeFile(path)
を使用してこれをビットマップとして読み込みます。
私はESからファイルを選択し、パスを次のように計算され、エクスプローラのファイル:パスの値がどこにあるか
String path = imageData.getData().getPath();
しかし、これは、ギャラリーやファイルから画像を選択するために動作しません。例えば、/external/images/media/38
である。
だから私は使用して外部から始まるようなパスに変換するために、チェックを入れて:
if (path.startsWith("/external")) {
path = getFilePathFromUri(imageData.getData());
}
private String getFilePathFromUri(Uri uri) {
Cursor cursor = managedQuery(uri,
new String[] { MediaStore.Images.Media.DATA },
null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
これは/mnt/sdcard/dcim/Camera/2011-11-13_15-33-24_304.jpg
に上記のパスに変換して、今、これはBitmapFactory.decodeFile(path)
のために働くの。
私は、このようなチェック(/外部)をハードコードするのは良い考えではないことを理解していますが、インテントで返されるURIのフォーマットを解決するために、
意向画像データを、 – Tanager4