2012-10-25 46 views
2

我試圖在用戶點擊通知時從我的應用程序啓動畫廊。我發現只有知道圖庫應用程序的包和類名時纔有可能。我設法爲四個設備製造商找到了相同的代碼,到目前爲止,這些代碼都可以工作。 我只需要摩托羅拉和LG Android手機的套件和類名稱。在Android手機中啓動畫廊

任何人都可以幫忙嗎?如果您是開發人員並擁有摩托羅拉或LG Android設備,對您來說非常容易。您只需在連接到LogCat的同時在手機中啓動畫廊,並顯示畫廊的包和類名。

CODE:

Intent newIntent = new Intent(); 

//open Gallery in Nexus plus All Google based ROMs 
if(doesPackageExist("com.google.android.gallery3d")) 
    newIntent.setClassName("com.google.android.gallery3d", "com.android.gallery3d.app.Gallery"); 

//open Gallery in Sony Xperia android devices 
if(doesPackageExist("com.android.gallery3d")) 
    newIntent.setClassName("com.android.gallery3d", "com.android.gallery3d.app.Gallery"); 

//open gallery in HTC Sense android phones 
if(doesPackageExist("com.htc.album"))       
    newIntent.setClassName("com.htc.album", "com.htc.album.AlbumMain.ActivityMainCarousel"); 

//open gallery in Samsung TouchWiz based ROMs 
if(doesPackageExist("com.cooliris.media")) 
    newIntent.setClassName("com.cooliris.media", "com.cooliris.media.Gallery"); 

startActivity(newIntent); 

並檢查包的名稱存在:

public boolean doesPackageExist(String targetPackage) { 

    PackageManager pm = getPackageManager(); 
    try { 
     PackageInfo info = pm.getPackageInfo(targetPackage, PackageManager.GET_META_DATA); 
    } catch (NameNotFoundException e) { 
     return false; 
    } 
    return true;  
} 

回答

3

你應該能夠通過基本Intent這樣啓動圖庫應用程序:

Intent intent = new Intent(Intent.ACTION_PICK); 
intent.setType("image/*"); 
startActivity(intent); 

如果多個應用程序能夠讓您顯示圖像,它可能會啓動應用程序選擇器(例如畫廊和ESFileExplorer)。

+1

這就是要點,我不希望用戶選擇任何圖像,我希望他只是直接前往Gallery應用程序。 – vividh

+1

這通常不是Android用戶期望的。如果他們已經將MyFooView設置爲他們喜歡的圖像查看應用程序,那麼如果您無條件啓動您想要的圖像,他們將會生氣。 –

+2

只有當他們點擊通知時,纔不是無條件的。當用戶從我的下載實用程序下載照片並點擊它時,我會顯示通知,用戶將被帶到圖庫以顯示下載的照片。 – vividh

1

在每個Android設備上都沒有描述「圖庫」應用程序的通用表格,因此爲了避免向用戶展示活動解析器,您可以做的最好的方式是以編程方式列出所有可能的活動處理程序,並做出明智的猜測哪一個發射。

PackageManager.queryIntentActivities變成一個Intent成包的這樣一個清單,只要你播種意向與文件類型打開:

Intent newIntent = new Intent(Intent.ACTION_VIEW); 
newIntent.setType("image/*"); 
List<ResolveInfo> allHandlers = pm.queryIntentActivities(newIntent, PackageManager.MATCH_DEFAULT_ONLY); 

然後,您可以拖網這個列表稱爲包(從上面的列表),否則,啓動列表中的第一個。

但是,您應該考慮製作一個您自己的微不足道的活動來顯示圖像。這是獲得您所尋求的控制水平的唯一途徑。