在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); }