遗憾的是, Intent.resolveActivity() 办法并不克不及剖断此方法所要启动的 Activity 是否存在,如不雅此 Activity 不存在,会报 java.lang.IllegalArgumentException: Unknown component 异常,并导致法度榜样崩溃。
下面看下 resolveActivity() 的代码,以及它的 类似办法 resolveActivityInfo() :
- public ComponentName resolveActivity(PackageManager pm) {
- if (mComponent != null) {
- return mComponent;
- }
- ResolveInfo info = pm.resolveActivity(this,
- PackageManager.MATCH_DEFAULT_ONLY);
- if (info != null) {
- return new ComponentName(
- info.activityInfo.applicationInfo.packageName,
- info.activityInfo.name);
- }
- return null;
- }
- public ActivityInfo resolveActivityInfo(PackageManager pm, int flags) {
- ActivityInfo ai = null;
- if (mComponent != null) {
- try {
- ai = pm.getActivityInfo(mComponent, flags);
- } catch (PackageManager.NameNotFoundException e) {
- // ignore
- }
- } else {
- ResolveInfo info = pm.resolveActivity(this,
- PackageManager.MATCH_DEFAULT_ONLY | flags);
- if (info != null) {
- ai = info.activityInfo;
- }
- }
- return ai;
- }
显而易见,我们此方法就是先设置的 ComponentName,所以会直接 return mComponent 给我们,并没有任何剖断的逻辑。相对的, resolveActivityInfo() 则可以进行有效剖断并返回 null。故,我们选择应用 Intent.resolveActivityInfo() 进行此方法下的剖断:
推荐阅读
现如今,DCIM对象在保障数据中间靠得住和高效地运营中发挥着关键感化,是以买家们应当密切存眷其安排的成长。何谓DCIM?数据中间基本架构治理(DCIM)的定义可能存在多种不合的版本。大年夜更>>>详细阅读
本文标题:Android必知必会-使用Intent打开第三方应用及验证可用性
地址:http://www.17bianji.com/lsqh/37130.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示