在Android应用程序中从图片应用程序中访问图片

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

谢谢。

您可以使用startActivityForResult ,传入描述您要完成的操作的Intent和数据源以执行操作。

幸运的是,Android包含一个用于select事件的Action: Intent.ACTION__PICK和一个包含图片的数据源: android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI用于本地设备或android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI上的图片android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI用于SD卡上的图像。

调用startActivityForResult传递select操作和用户想要select的图像,如下所示:

 startActivityForResult(new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI), SELECT_IMAGE); 

然后覆盖onActivityResult来监听用户做出select。

 @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 } } 

一旦你有了图像你可以使用它来访问图像,并做你需要做的任何事情。

你也可以这样做:

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

这将在所有存储器中select图像。

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