2013-08-20 4 views
0

Я хочу открыть галерею, когда пользователь нажимает кнопку. Код, который я использую это:Открытие галереи как приложение программно

Intent resimGaleri = new Intent(); 
resimGaleri.setType("image/*"); 
resimGaleri.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
Main.this.startActivity(resimGaleri); 

Однако в этом коде, когда пользователь нажимает на кнопку, чтобы открыть галерею, Android спрашивает: «Завершить действие с помощью», но я хочу, чтобы открыть галерею напрямую, не спрашивая. Я могу сделать это с помощью следующего кода:

startActivity(new Intent("com.android.gallery3d")); 

Но я не уверен, если все устройства используют «com.android.gallery3d» или нет. Возможно ли, или есть ли другой способ сделать это?

+0

Вы не должны заставлять пользователей использовать конкретное приложение для галереи, просто позвольте им выбрать из установленных им поставщиков image/*. Если нет другого поставщика, кроме приложения Gallery, он будет открыт без подсказки. –

+0

Но наша программа должна заставить пользователей использовать определенную галерею, которая является галереей Android по умолчанию. – halilkaya

+0

Не всякая установка для Android имеет галерею Android по умолчанию, подумайте о фирменных ROM, например. от HTC, Verizon, ... и подумайте о установке Cyanogenmod. Вы можете проверить, присутствует ли конкретное приложение галереи, и запустить его, иначе вы можете выбрать пользователя. –

ответ

2

Не все устройства имеют com.android.gallery3d, в то время как большинство из них это делает. Вы можете запросить менеджера пакетов с помощью действия VIEW с изображением типа MIME/*, чтобы получить список действий. Затем просмотрите список, чтобы найти правильный.

final Intent i = new Intent(Intent.ACTION_VIEW, null); 
i.setType("image/*"); 
final List<ResolveInfo> apps = packageManager.queryIntentActivities(i, 0); 
if(apps != null) { 
    for(ResolveInfo info : apps) { 
     if(info.resolvePackageName!=null && info.resolvePackageName.contains("gallery3d")) {//Maybe use more strict condition 
      //This is the target you want 
      //startActivity(XXXX); 
      return; 
     } 
    } 
    //Target not found 
    //Start the first match or handle your exception here 
} else { 
//Handle exception 
} 
+0

Я вижу. Можете ли вы привести пример через свой 2-й пункт? – halilkaya

+0

Пустой образец добавлен для вашей справки – Robin

0

Вы можете использовать этот код: (его апробирование код не смотреть массаж прошу вас).

// select a file 
Intent intent = new Intent(); 
intent.setType("image/*"); 
intent.setAction(Intent.ACTION_GET_CONTENT); 
startActivityForResult(Intent.createChooser(intent, "Select Picture"), 1); 
Смежные вопросы