Доступ к изображениям из приложения Pictures в моем приложении для Android
-
23-08-2019 - |
Вопрос
Точно так же, как у iPhone есть UIImagePickerController, позволяющий пользователю получать доступ к изображениям, хранящимся на устройстве, есть ли у нас аналогичный элемент управления в Android SDK?
Спасибо.
Решение
Вы можете использоватьstartActivityForResult
, передавая намерение, которое описывает действие, которое вы хотите выполнить, и источник данных для выполнения этого действия.
К счастью для вас, 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 изображения, вы можете использовать его для доступа к изображению и делать с ним все, что вам нужно.
Другие советы
Вы также можете сделать:
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);
}