2009-02-15 4 views
41

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

Спасибо.

+1

Я считаю, что вы после этого является поставщиком контента называется android.provider и класс под названием MediaStore.Images [Более подробную информацию можно найти здесь.] (Http://developer.android.com/reference/android/provider/package-summary.html) – GregD

ответ

83

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

+0

Мое onactivityresult не получает вызов при использовании этого ... любое предложение? Я установил разрешение на внешнее хранилище –

+0

Чтобы узнать, как именно вы извлекаете путь к файлу из переменной selectedImage, ознакомьтесь с этим ответом: http://stackoverflow.com/a/10474167 – Tiago

22

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

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

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

+0

Возможно ли, чтобы камера появилась в качестве дополнительного источника Вот? – jjxtra

+0

, если вы передаете статический 1 в startActivityForResult, как вы определяете код запроса внутри onActivityResult()? –

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

 Смежные вопросы

  • Нет связанных вопросов^_^