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!