主要更新模块
电源管理
App Link
指纹识别
应用权限管理(最重要)
电源管理:
App Standby(应用待机)
检测:当设备不充电,且在这段时间内用户没有直接或者间接的启动
退出:当应用被激活时,或者设备充电时,系统将应用移出此状态
Doze
检测:当设备不充电,且当设备静止且灭屏一段时间
周期:平台尝试让系统处于休眠状态,周期性地进入在一个维持窗口恢复正常操作,然后进入更长的休眠状态.
App Link
全称为应用程序链接
技术点:就是我们的隐式启动Intent
Android更加鼓励应用程序间的关联而不再是单一的应用同浏览器交互
指纹识别
6.0以前一直由各手机制造商去研发。导致指纹识别不同的手机差异很大
6.0以后由Android系统提供API,硬件厂商只需要提供相应的硬件支持即可
应用程序权限管理
5.0以前,只需要manifest.xml中注册即可
5.0以后,用户可以在安装的时候关闭某些权限
6.0及以后,对于一些用户隐私权限总是会在第一次提示用户是否授予权限(和Iphone类似)
运行时权限的优势
新的权限机制更好的保护了用户的隐私
给了程序向用户说明权限的作用
可以防止一些恶意程序盗取用户或者手机信息,增强了Android系统的安全性
运行时权限的分类
Normal Premisson
Dangerous Permission &Dnagerous Premission Group
权限组的概念
如果你申请某个危险的权限,假设你的APP早已被授权了同一组某个危险权限,那么系统会立即授权,而不需要用户去点击授权
新增API
ContextCompact.checkSelfPermission:检测是否有某个权限
ActivityCompat.requestPermissions():申请某个权限
onRequestPermissionResult():用户设置权限后的处理(异步)
ActivityCompat.shouldShowRequestPermissionRationable: 可以给用户一个解释:用户拒绝后
点击按钮进行拨打号码
public void call(View v) {
callPhone();
}
private void callPhone() {
//判断权限是否被授予
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE)
!= PackageManager.PERMISSION_GRANTED) {
//做权限处理
ActivityCompat.requestPermissions(this, new String[]
{Manifest.permission.CALL_PHONE}, 100);
} else {
doCallPhone();
}
}
private void doCallPhone() {
Intent intent = new Intent(Intent.ACTION_CALL);
Uri uri = Uri.parse("tel:" + "10086");
intent.setData(uri);
startActivity(intent);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 100://打电话
//打电话的权限回调
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
doCallPhone();
} else {
//提示用户
Toast.makeText(this, "打电话权限没有被授予", Toast.LENGTH_SHORT).show();
}
break;
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}