iPhone に UIImagePickerController があり、ユーザーがデバイスに保存されている画像にアクセスできるように、Android SDK にも同様のコントロールがありますか?
ありがとう。
iPhone に UIImagePickerController があり、ユーザーがデバイスに保存されている画像にアクセスできるように、Android SDK にも同様のコントロールがありますか?
ありがとう。
を使用startActivityForResultして、完了させたいアクションを説明するインテントと、アクションを実行するデータソースを渡すことができます。
幸いなことに、Androidには、物を選ぶためのアクションと、ローカルデバイス上の画像または
SDカード上の画像用の画像Intent.ACTION__PICKを含むデータソースが含ま
れています。android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URIandroid.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI
startActivityForResult次のように、選択アクションとユーザーに選択させたい画像を渡すように呼び出します。
startActivityForResult(new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI), SELECT_IMAGE);
次に、オーバーライドonActivityResultして、選択を行ったユーザーをリッスンします。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SELECT_IMAGE)
if (resultCode == Activity.RESULT_OK) {
Uri selectedImage = data.getData();
// TODO Do something with the select image URI
}
}
画像のURIを取得したら、それを使用して画像にアクセスし、必要な操作を行うことができます。
次のこともできます。
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, 1);
これにより、すべてのストレージから画像が選択されます。
Retoからの回答を更新しただけです。これを行うと、画像をスケーリングできます。
private String getPath(Uri uri) {
String[] data = { MediaStore.Images.Media.DATA };
CursorLoader loader = new CursorLoader(context, uri, data, null, null, null);
Cursor cursor = loader.loadInBackground();
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}