Доступ к изображениям из приложения Pictures в моем приложении для Android

StackOverflow https://stackoverflow.com/questions/550905

  •  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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top