【问题标题】:Access pictures from Pictures app in my android app在我的 Android 应用程序中从图片应用程序访问图片
【发布时间】:2010-10-07 17:53:43
【问题描述】:

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

谢谢。

【问题讨论】:

标签: android android-image


【解决方案1】:

你可以使用startActivityForResult,传入一个描述你想要完成的动作和数据源的意图。

幸运的是,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 后,您可以使用它来访问图像并使用它做任何您需要做的事情。

【讨论】:

  • 使用这个时我的 onactivityresult 没有被调用...有什么建议吗?我设置了外部存储权限
  • 要查看您如何准确地从 selectedImage 变量中检索文件路径,请查看以下答案:stackoverflow.com/a/10474167
【解决方案2】:

你也可以这样做:

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

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

【讨论】:

  • 是否可以让相机在此处显示为附加来源?
  • 如果将静态1传递给startActivityForResult,如何识别onActivityResult()中的请求代码?
【解决方案3】:

只是对 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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    相关资源
    最近更新 更多