Android高版本新特性

Android高版本中需要注意的

Posted by JovenHe on May 15, 2019

在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这种自定制图标的方式

Image-asset.png

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标签说明一文