2013-08-20 107 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,而其中大部分都是。您可以通過具有MIME類型image/*的意向操作VIEW來查詢軟件包管理器以獲取活動列表。然後查看列表以找到正確的列表。

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

我明白了。你能通過你的第二個條款來舉個例子嗎? – 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); 
相關問題