Доступ к фотографиям из приложения «Изображения» в моем приложении для Android - PullRequest
42 голосов
/ 15 февраля 2009

Так же, как iPhone имеет UIImagePickerController, позволяющий пользователю получать доступ к изображениям, хранящимся на устройстве, у нас есть аналогичный элемент управления в Android SDK?

Спасибо.

Ответы [ 3 ]

84 голосов
/ 15 февраля 2009

Вы можете использовать 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, вы можете использовать его для доступа к изображению и делать с ним все, что вам нужно.

22 голосов
/ 08 октября 2011

Вы также можете сделать:

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

Это выберет изображения во всех хранилищах.

1 голос
/ 30 января 2013

Просто обновление на ответ, данный Рето. Вы можете сделать это, чтобы масштабировать изображение:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...