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
是不是你认为它是。 :-)
使用ResolveInfo
如果你想获得包名试试这个:
(ResolveInfo Object).activityInfo.packagename;
这将返回包名称的字符串。
帮助我!因为resolveInfo.resolvePackageName始终返回null! – ThunderWiring
啊我明白了!我正在使用'resolvePackageName'。在那个笔记上,我是否使用了获取图标的正确方法?因为没有人出现。我也尝试过'appImage.setImageResource(listOfApps.get(count).activityInfo.icon);'但仍然没有显示图标。 – eoinzy
@eoinzy:我在'ResolveInfo'对象上使用'loadIcon()'。 – CommonsWare
很酷。我设法通过使用'appImage.setImageDrawable(pm.getApplicationIcon(listOfApps.get(count).activityInfo.packageName))''得到它。谢谢。 – eoinzy