2016-08-25 113 views
-1

我正在开发一个启动器应用程序。我注意到相机和画廊的名称相同,Google+和Photos也具有相同的名称。当我尝试启动相机/画廊时,会打开画廊,当我尝试启动照片/ Google +时,我会打开Goog​​le+。相机和图库具有相同的包名称

我使用此代码来获取应用程序列表。

Intent i = new Intent(Intent.ACTION_MAIN, null); 
i.addCategory(Intent.CATEGORY_LAUNCHER); 
List<ResolveInfo> availableActivities = manager.queryIntentActivities(i, 0); 

至于摄像头,我知道,我可以用一个Intent时,应用程序的名称是摄像头和包名是画廊,但也可能有许多应用程序具有同样的事情,开始摄像。是否有任何适用于所有应用程序的通用解决方案?

PS:这是我如何得到应用信息

for(ResolveInfo ri : availableActivities) { 
    AppItem app = new AppItem(); 
    app.setLabel(ri.loadLabel(manager)); 
    app.setName(ri.activityInfo.packageName); 
    quick_apps.add(app); 
} 

回答

1

虽然他们有相同的包名,但他们有不同势的名字,试试这个,开始你的活动,使用下面的代码开始活动

Intent localIntent = new Intent(); 
    localIntent.setComponent(new ComponentName(
      localResolveInfo.activityInfo.packageName, 
      localResolveInfo.activityInfo.name)); 
    localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    try 
    { 
     startActivity(localIntent); 
    } catch (ActivityNotFoundException localActivityNotFoundException) 
    { 
     Toast.makeText(mContext, "Package not found!", 0).show(); 
    } 
+0

它的工作原理,谢谢! –

+0

很高兴帮助你:) – user3186605