前几天正好看到《阿里巴巴 Android 开发手册》中提到的:

“Activity 间通过隐式 Intent 的跳转,在发出 Intent 之前必须通过 resolveActivity 检查,避免找不到合适的调用组件,造成 ActivityNotFoundException 的异常”

今天就在一台联想的平板上弹了好几个崩溃,查找之后发现是通过 Intent 跳转到拨号和浏览器的时候就会崩溃

原因分析:平板上没有安装拨号软件和浏览器,导致找不到调用组件,直接崩溃;话不多说立马在 APP 内搜 Action 为 Intent.ACTION_VIEW 等通过隐式跳转的地方,测试了下的确是直接崩溃了;从没考虑过兼容平板,都是用的手机,所以一直没发现这个问题;现在加上检查之后虽然不会跳转,但起码不会崩溃了,毕竟不符合条件的设备目前不是很多

所有隐式的 startActivity 一律调用下面的方法检查:

 /**
* Activity 间通过隐式 Intent 的跳转,在发出 Intent 之前必须通过 resolveActivity 检查,
* 避免找不到合适的调用组件,造成 ActivityNotFoundException 的异常
* @param context
* @param intent
*/
public static void startActivityCheckIntent(Context context, Intent intent) {
if (intent == null) {
return;
} if (context.getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) != null) {
try {
context.startActivity(intent);
} catch (ActivityNotFoundException e) {
LogUtil.e(e.toString());
}
}
}

错误写法:

Intent intent = new Intent(); intent.setAction("com.great.activity_intent.Intent_Demo1_Result3"); startActivity(intent);

Android 隐式 Intent 跳转注意事项的更多相关文章

  1. android隐式intent使用场景解析

    Android 隐式intent相信大家都有用过,大部分场景我们用显式intent已经能满足我们的业务需求,隐式intent大部分都是用来启动系统自带的Activity或Service之类的组件.昨天 ...

  2. 安卓开发学习笔记(四):Android Stuidio无法实现隐式Intent是为什么?

    一.首先检查我们的代码: FirstActivity.java(主活动程序当中的代码):Button3监听器后面的代码就是我们隐式Intent的业务逻辑所在了,大家可以往下面看看,大概在代码的第57行 ...

  3. Android -- 两个activity界面的切换, 显示Intent 和 隐式Intent,putExtra传递数据

    1. 两个Activity之间可以通过Intent切换, 包括显示Intent 和 隐式Intent. 实例代码 MainActivity.java public class MainActivity ...

  4. Android开发:显式/隐式Intent

    显式跳转 是在已知包名和类名的情况下常用的跳转方法: Intent mIntent = new Intent(); mIntent.setClassName("com.android.set ...

  5. 在Android中Intent的概念及应用(一)——显示Intent和隐式Intent

    Intent寻找目标组件的两种方式: 显式Intent:通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,一般是在相同的应用程序内部实现的. 隐式Intent:通过Intent ...

  6. Android开发学习笔记:浅谈显示Intent和隐式Intent

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liangruijun.blog.51cto.com/3061169/655132 ...

  7. Android开发之隐式Intent中Intent-filter的三个属性-action,category,data

    使用隐式Intent时,需要使用到意图过滤器Intent-filter.Intent-filter含有三个属性:action,category,data.通过这三个属性的组合,可以启动想要启动的act ...

  8. Android开发学习之浅谈显示Intent和隐式Intent

    Intent寻找目标组件的两种方式: 显式Intent:通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,一般是在相同的应用程序内部实现的. 隐式Intent:通过Intent ...

  9. 【Android】6.0 添加Menu菜单组件、Intent启动活动、显式Intent、隐式Intent

    1.0 在helloworld项目基础上创建活动SecondActivity: 2.0 其中main.xml: <?xml version="1.0" encoding=&q ...

随机推荐

  1. JS中Math函数的常用方法

    Math 是数学函数,但又属于对象数据类型 typeof Math => ‘object’ console.dir(Math) 查看Math的所有函数方法. 1,Math.abs() 获取绝对值 ...

  2. ASP.NET后台取html控件值方式

    1.Request.Form[“cbName”]: 可以在后台取到所有为name 为的控件的value值 2.可以通过 把html控件的值付给HiddenField,然后后台调用 3.就是自定义属性 ...

  3. elementui 给 左侧功能栏 加上 el-scroll 时 , el-main 会 挤压 左侧导航栏..

    解决方法... el-main 给上 style='width:0'........... 并不会影响 el-main 布局...

  4. C++_基础5-内存模型

    C++为在内存中存储数据提供了多种选择: 可以选择数据保留在内存中的时间长度(存储持续性): 程序的哪一部分可以访问数据(作用域和链接): 可以使用new来动态地分配内存:定位new运算符提供了这种技 ...

  5. Putty之public key ssh认证入门

    1.工作平台 客户端:Win2kEn Sp3,Putty Beta 0.53 服务器:RedHat72,OpenSSH_3.4p1 2.Putty简介 一个免费小巧的Win32平台下的ssh客户端.它 ...

  6. poj3040

    一.题意:约翰要给他的牛贝西发工资,每天不得低于C元,约翰有n种面值的钱币,第i种的面值为v_i,数量有b_i.问这些钱最多给贝西发多少天的工资.注意,每种面值的金钱都是下一种的面值的倍数. 二.思路 ...

  7. Python入门笔记——(1)数字与表达式

    一.算术运算 整除:// 取余:% 乘方:** (a ** b = pow(a, b)) 十六进制表示:0x...,八进制表示0... round(x [, n]):对x从小数点第n位取四舍五入结果, ...

  8. PIE SDK SFIM融合

    1.算法功能简介 SFIM 融合方法全称为基于平滑滤波的亮度变换.基本原理是将高分辨率影像通过低通滤波抑制其高频空间信息保留低频信息,再将原高分辨率影像与通过低通滤波的高分辨率影像进行比值运算,以抵消 ...

  9. 2.Exadata 硬件体系结构

    Exadata 硬件加构: 高性能,低成本 冗余 线性扩展 ,具有超强性能,开箱即用         例 2-2的满配: 8台数据服务器组成(2C 6核) (3-2是10核, 4-2,5-2 是12核 ...

  10. python 爬虫系列03--职位爬虫

    职位爬虫 import requests from lxml import etree cookie = { 'Cookie':'user_trace_token=20181015184304-692 ...