就像 iPhone 有一个 UIImagePickerController 让用户访问存储在设备上的图片一样,我们在 Android SDK 中是否也有类似的控件?
谢谢。
就像 iPhone 有一个 UIImagePickerController 让用户访问存储在设备上的图片一样,我们在 Android SDK 中是否也有类似的控件?
谢谢。
您可以使用startActivityForResult
, 传入一个描述您想要完成的操作的 Intent 以及要执行该操作的数据源。
幸运的是,Android 包含一个用于挑选东西的动作:Intent.ACTION__PICK
和一个包含图片的数据源:
android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI
用于本地设备上的
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI
图像或 SD 卡上的图像。
调用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);
}