Android-如何获取动态意图的软件包详细信息
因此,我正在制作一个自定义应用程序选择器。它将安装浏览器,并安装任何地图应用程序。我得到的结果如下:Android-如何获取动态意图的软件包详细信息,android,android-intent,Android,Android Intent,因此,我正在制作一个自定义应用程序选择器。它将安装浏览器,并安装任何地图应用程序。我得到的结果如下: PackageManager packageManager = activity.getPackageManager(); //This gets all the browsers String browserURI = "http://"+Driver.getIamhereURL()+lat+","+lon; Intent browserIntent = new Intent(In
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);
PackageManager-PackageManager=activity.getPackageManager();
//这将获得所有浏览器
String browserURI=“http://”+Driver.getiahereurl()+lat+”,“+lon;
Intent-browserint=新的Intent(Intent.ACTION_视图,Uri.parse(browserURI));
List browserList=packageManager.QueryInputActivities(BrowserContent,0);
//这将获取所有地图应用程序:
字符串mapUri=“geo:“+lat+”,“+lon;
Intent mapIntent=新的Intent(Intent.ACTION_视图,Uri.parse(mapUri));
List mapList=packageManager.QueryInputActivities(MapContent,0);
//结合两者
addAll(mapList);
//现在构建布局并返回LinearLayout
LinearLayout appListBody=buildAppList(浏览器列表、packageManager);
因此,appListBody
将包含应用程序图标和应用程序名称。显然,每个应用程序都必须有一个与之关联的onClickListener()
,它将启动intent
。我的问题是,当我只能得到列表应用程序时,如何将意图
发送到我的方法
我可以尝试for
循环并转到pm.getLaunchIntentForPackage(listOfApps.get(count.resolvePackageName)
,但随后我得到NullPointerException:包名为null
有人能帮忙吗
谢谢
我的问题是,当我只能得到listOfApps列表时,如何将意图发送到我的方法
您可以自己构建合适的意图
:
@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);
}
这来自我的示例项目,它在一个适配器上有一个ListView
,适配器上有ResolveInfo
对象
我认为您的解决方案即使不优于此解决方案,也会是等效的,但您需要使用activity.applicationInfo.packageName
才能使用此包resolvePackageName
不是您认为的那样。:-)
我的问题是,当我只能得到listOfApps列表时,如何将意图发送到我的方法
您可以自己构建合适的意图
:
@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);
}
这来自我的示例项目,它在一个适配器上有一个ListView
,适配器上有ResolveInfo
对象
我认为您的解决方案即使不优于此解决方案,也会是等效的,但您需要使用activity.applicationInfo.packageName
才能使用此包resolvePackageName
不是您认为的那样。:-) 使用ResolveInfo
如果要获取包名,请尝试以下操作:
(ResolveInfo Object).activityInfo.packagename;
这将返回一个包名字符串。使用ResolveInfo
如果要获取包名,请尝试以下操作:
(ResolveInfo Object).activityInfo.packagename;
这将返回一个包名字符串。啊,我明白了!我正在使用resolvePackageName
。在这一点上,我是否使用了获取图标的正确方法?因为没有人出现。我还尝试了appImage.setImageResource(listOfApps.get(count.activityInfo.icon))代码>但仍然没有显示图标。酷。我通过使用appImage.setImageDrawable(pm.getApplicationIcon(listOfApps.get(count.activityInfo.packageName)),成功地获得了它代码>。谢谢。啊,我明白了!我正在使用resolvePackageName
。在这一点上,我是否使用了获取图标的正确方法?因为没有人出现。我还尝试了appImage.setImageResource(listOfApps.get(count.activityInfo.icon))代码>但仍然没有显示图标。酷。我通过使用appImage.setImageDrawable(pm.getApplicationIcon(listOfApps.get(count.activityInfo.packageName)),成功地获得了它代码>。谢谢,这对我有帮助!因为resolveInfo.resolvePackageName始终返回null!这对我有帮助!因为resolveInfo.resolvePackageName始终返回null!