Подтвердить что ты не робот

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

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

Спасибо.

4b9b3361

Ответ 1

Вы можете использовать startActivityForResult, передавая в Intent, который описывает действие, которое вы хотите завершить, и источник данных для выполнения действия.

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

Ответ 2

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

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

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

Ответ 3

Просто обновите ответ, полученный 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);
}