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实现
相关文章推荐
- swift 图层设置遮罩层
- cocos2dx android添加广点通广告平台的---插屏广告
- Android四种存储方式
- Android Studio搭建NDK
- Android基础之json字段重命名
- android 拼图游戏2(可从手机选择任意一张图片)
- iOS view 的生命周期
- ios 判断GPS是否是在中国境内
- 将android源码导入as
- ios 关于正则表达式
- googleplay和appstore如何实现强更
- ANDROID内存优化(大汇总——全)
- iOS-OC-tableview SDWebImage加载多张图片内存警告(received memory warning)
- sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class
- 在dialog中获取Edittext的值
- 给libcef_dll_wrapper生成VS工程
- ios 含有textfield的viewcontroller随键盘弹起而改变位置
- AppScan安装时出现错误1603
- Android基础之git 中断命令行
- Android Binder 全解析(2) -- 设计详解