在Android高版本中总有许多要注意的。本文列举一些实例:
运行时权限
在Android6中增加了运行时权限,一开始开发者并不接受,通过targetSdkVersion 低于22来逃避,但现在已经被广大开发者接受了。本人是通过引入RxPermissions来申请运行时权限的。例如:
build.gradle引入
implementation 'com.github.tbruyelle:rxpermissions:0.10.2'
Manifest中写入
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
代码中写入
final RxPermissions rxPermissions = new RxPermissions(this);
rxPermissions
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.subscribe(granted -> {
if (granted) {
//已获取
} else {
Toast.makeText(mContext, "请赋予存储权限", Toast.LENGTH_SHORT).show();
}
});
URI错误
Andoid7开始禁止在您的应用外部公开 file://
URI,否则应用出现故障,并出现 FileUriExposedException
异常
在调用摄像头拍照获取图片或者安装Apk文件时经常遇到。
最简单方式是使用 FileProvider
类
图标显示
Android8 的app图标显示和之前不同,支持不同的圆角,圆形Icon的显示,所以在Android Studio上页新增了Image asset这种自定制图标的方式
UI提供无背景透明icon图标和背景图,然后在Image asset中设置icon图标,并调整大小,然后设置背景图或者背景颜色,确定后就能生成不同版本通用的Icon了。
通知显示
Android8之后通知的显示需要为通知添加渠道:NotificationChannel
在得到NotificationManager对象后通过
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
NotificationChannel channel=new NotificationChannel(id,name,NotificationManager.IMPORTANCE_HIGH);
mNotificationManager.createNotificationChannel(channel);
}
然后按照正常通知显示就可以了
明文通信
Android 9不支持明文通信,如果网络请求时http请求会报异常。具体原因和解决方案在AndroidManifest标签说明一文