2010-06-09 54 views
1

应用程序可以具有任意数量的可启动活动。我知道如何通过PackageManager获取这些活动的列表。确定是否可以启动应用程序中的特定活动

有没有办法确定哪些活动可以通过startActivity启动?

例如,Documents To Go应用程序具有启动Word,Excel,Powerpoint,PDF等的不同活动......我可以启动所有这些就好了。

但是,它也包含一些我无法用startActivity启动的活动......如果我尝试这样做,我会得到一个SecurityException。

我希望能够确定哪些活动,我可以放心地启动和我不能,所以我只能用的,我可以放心地从我的应用程序内开展活动的列表呈现给用户...

这是可能?

回答

1

使用您拥有的参数/数据创建意图,然后使用软件包管理器resolveActivity()方法来检查将处理您的请求的活动。

然后使用PackageManager的checkPermission()方法检查权限。

HTH!

+0

谢谢!我会研究一下...... – Justin 2010-06-09 17:14:49

+0

不幸的是,resolveActivity()方法仅用于隐式意图。由于我为我正在启动的活动(我通过PackageManager获取它们)提供了包和类名,因此此方法不适用于我想要执行的操作。 我没有问题找到要启动的活动。问题是,当我尝试通过startActivity()启动它时,出现SecurityException错误... 欢迎任何其他建议。 – Justin 2010-06-10 23:59:51

+0

对于它的价值,我从SecurityException得到的确切错误是:Permission Denial:从ProcessRecord {start = 43565cb0 14660:com.magouyaware.appswipe/10043}(pid = 14660,uid = 10043)要求为空 – Justin 2010-06-11 00:10:38

0

这可能是旧帽子给你,但你可以使用这个方法:

getPackageManager().getLaunchIntentForPackage(
       packageName); 

这里是一个办法让安装的应用程序的软件包名称:

final PackageManager pm = getPackageManager(); 

     List<ApplicationInfo> packages = pm 
       .getInstalledApplications(PackageManager.GET_META_DATA); 

     for (ApplicationInfo packageInfo : packages) { 

      Log.d(TAG, "Installed package :" + packageInfo.packageName); 
      Log.d(TAG, 
        "Launch Activity :" 
          + pm.getLaunchIntentForPackage(packageInfo.packageName)); 

     } 
+0

谢谢尼尔森,但那样做其实并没有回答我的问题。您所找到的代码意图启动给定包的默认活动。我的要求是不同的。我已经有了给定活动的包名和类名......在大多数情况下,我可以用明确的意图启动它。但是,在某些情况下,我得到了拒绝错误的权限......我所有的努力来检查我是否有权启动该活动都会被忽略,并且我仍然会得到SecurityException说权限被拒绝。 – Justin 2011-03-22 13:35:00

+0

啊,我现在明白了。如果你能够发现可能达到的错误。对不起,我忍不住。 – 2011-03-31 21:16:10

相关问题