Android - 如何获取动态意图的包详细信息

问题描述:

因此,我正在制作自定义应用选择器。它将安装浏览器,并安装任何地图应用程序。我得到的每一项如下:Android - 如何获取动态意图的包详细信息

PackageManager packageManager = activity.getPackageManager();  
//This gets all the browsers 
String browserURI = "http://"+Driver.getIamhereURL()+lat+","+lon; 
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(browserURI)); 

List<ResolveInfo> browserList = packageManager.queryIntentActivities(browserIntent, 0); 

// This gets all the Map apps: 
String mapUri = "geo:"+lat+","+lon; 
Intent mapIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(mapUri)); 

List<ResolveInfo> mapList = packageManager.queryIntentActivities(mapIntent, 0); 

//Combine the two 
browserList.addAll(mapList); 
//Now build layout and return a LinearLayout 
LinearLayout appListBody = buildAppList(browserList,packageManager); 

所以appListBody将有望拥有这个应用程序图标和应用程序名称。很显然,每个应用都必须有一个onClickListener()与之关联,这将启动intent。我的问题是,我如何发送intent到我的方法,当我所能得到的是List<ResolveInfo> listOfApps

我可以尝试for循环,然后去pm.getLaunchIntentForPackage(listOfApps.get(count).resolvePackageName),但后来我得到NullPointerException: package name is null

任何人都可以帮忙吗?

谢谢。

我的问题是,当我所能得到的是List listOfApps时,我该如何将意图发送给我的方法?

您可以自己构建一个适合Intent

@Override 
    protected void onListItemClick(ListView l, View v, 
           int position, long id) { 
    ResolveInfo launchable=adapter.getItem(position); 
    ActivityInfo activity=launchable.activityInfo; 
    ComponentName name=new ComponentName(activity.applicationInfo.packageName, 
             activity.name); 
    Intent i=new Intent(Intent.ACTION_MAIN); 

    i.addCategory(Intent.CATEGORY_LAUNCHER); 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 
       Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); 
    i.setComponent(name); 

    startActivity(i);  
    } 

这是从我Launchalot示例项目,其中有一个适配器的全ResolveInfo对象上ListView

我会认为你的解决方案如果不是优越的,将是等效的,但你需要使用activity.applicationInfo.packageName来获得使用的软件包。 resolvePackageName是不是你认为它是。 :-)

+0

啊我明白了!我正在使用'resolvePackageName'。在那个笔记上,我是否使用了获取图标的正确方法?因为没有人出现。我也尝试过'appImage.setImageResource(listOfApps.get(count).activityInfo.icon);'但仍然没有显示图标。 – eoinzy

+1

@eoinzy:我在'ResolveInfo'对象上使用'loadIcon()'。 – CommonsWare

+0

很酷。我设法通过使用'appImage.setImageDrawable(pm.getApplicationIcon(listOfApps.get(count).activityInfo.packageName))''得到它。谢谢。 – eoinzy

使用ResolveInfo如果你想获得包名试试这个:

(ResolveInfo Object).activityInfo.packagename; 

这将返回包名称的字符串。

+0

帮助我!因为resolveInfo.resolvePackageName始终返回null! – ThunderWiring