和 iPhone 中的 UIImagePickerController 允许用户访问设备上存储的图片一样,我们在 Android SDK 中是否有类似的控件可供使用?
谢谢。
谢谢。
你可以使用startActivityForResult
,传入一个描述要完成的操作和执行该操作的数据源的Intent。
幸运的是,Android包含一个用于选择事物的Action: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);
}