在我的Android应用中访问图片应用中的图片

时间:2009-02-15 13:57:06

标签: android android-image

就像iPhone有一个UIImagePickerController让用户访问存储在设备上的图片一样,Android SDK中是否有类似的控件?

感谢。

3 个答案:

答案 0 :(得分:84)

您可以使用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后,您可以使用它来访问图像并执行任何操作。

答案 1 :(得分:22)

你也可以这样做:

Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, 1);

这将在所有存储中选择图像。

答案 2 :(得分: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);
}