Как через Intent получить список вариантов для работы с камерой?

Как, используя Intent, получить список вариантов для "взятия" картинки? Т.е. надо, чтобы система предложила, как взять фото: камерой или из галереи.

В одном из приложений видел, как при нажатии на кнопку выводился список вариантов.

Или при отправке письма предлагаются разные варианты.


Ответы (1 шт):

Автор решения: Barmaley Red Star

Это 2 разных Intent'а:

1) Intent доступа к галерее:

Intent galleryIntent=new Intent(Intent.ACTION_GET_CONTENT);
galleryIntent.setType("image/*"); 

2) Intent доступа к камере:

Intent cameraIntent = new Intent("android.media.action.IMAGE_CAPTURE");

Проблема в том, что приложений доступа к галерее может быть несколько, равно как и приложений камеры и даже если их несколько, то может использоваться только дефолтная. Чтобы показывать в диалоге все, надо сделать собственный Dialog, контент которого генерится приблизительно так:

List<Intent> intentsList = new ArrayList<Intent>();

List<ResolveInfo> listCamera = packageManager.queryIntentActivities(cameraIntent, 0);
for (ResolveInfo res : listCamera) {
    final Intent finalIntent = new Intent(cameraIntent);
    finalIntent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
    intentsList.add(finalIntent);
}

List<ResolveInfo> listGallery = packageManager.queryIntentActivities(galleryIntent, 0);
for (ResolveInfo res : listGallery) {
    final Intent finalIntent = new Intent(galleryIntent);
    finalIntent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
    intentsList.add(finalIntent);
}

В итоге в переменной intentsList будет список Intentов которые могут иметь доступ галерее и запускать камеру. Эти данные надо вложить в список и отобразить в Dialog - что в общем то несложно. Уверен вы справитесь.

→ Ссылка