您的位置:首页 > 移动开发

Intent之resolveActivity() 防止APP崩溃

2016-06-08 17:34 351 查看
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;
}


源码如上:

在我们startActivityForResult()时,为了确保有APP处理该Intent 可以做非空判断,当然,非强制。

resolveActivity()返回处理该Intention的Activity组件。所返回的Activity取决于Intent的如下信息

对于显示意图,如果Intent的getComponent()函数返回了一个明确的类,直接返回该组件。

对于隐式意图,必须处理Category为CATEGORY_DEFAULT的Activity组件。

getAction()非空时还要处理这个动作;resolveType()非空时,还要处理数据类型。

对于Intent中addCategory()中添加的任何categories,Activity必须全部处理。

对于getPackage()非空的情况下,该应用中的Activity组件才会被考虑。

如果以上条件全部不满足的情况下,函数返回空字符串。

如果多个Activity组件满足Intent,拥有最高优先级的活动会优先使用,如果多个活动优先级相同,系统或者根据用户的喜好选择最适合的活动或者解析成一个系统级别的类,允许用户选择一个活动。

这个方法的实现仅仅是调用PackageManager的参数为”defaultOnly”的resolveActivity实现
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Intent-意图