Android各版本需要注意的点的记录
2019-07-31 本文已影响4人
fastcv
前言
安卓系统每年都会有所变化,会更加的安全完善,在这个过程中,开发者也需要注意一下,每个版本变化出现的坑。
安卓5.0
在5.0之后,我们的design风格的组件才能使用,不然会出问题
安卓6.0
6.0之后,部分权限需要动态申请,我把这些权限列举出来
权限 | 说明 |
---|---|
permission:android.permission.WRITE_CONTACTS | 写入联系人,但不可读取 |
permission:android.permission.GET_ACCOUNTS | 允许程序访问Gmail账户 |
permission:android.permission.READ_CONTACTS | 读取联系人,但不可写入 |
permission:android.permission.READ_CALL_LOG | 允许读取通话记录 |
permission:android.permission.READ_PHONE_STATE | 允许程序访问设备状态 |
permission:android.permission.CALL_PHONE | 允许程序从非系统拨号器里拨打电话 |
permission:android.permission.WRITE_CALL_LOG | 允许程序写入(但不能读)用户的联系人数据 |
permission:android.permission.USE_SIP | 允许程序使用SIP视频服务 |
permission:android.permission.PROCESS_OUTGOING_CALLS | 允许程序监视,修改或放弃播出电话 |
permission:com.android.voicemail.permission.ADD_VOICEMAIL | 允许一个应用程序添加语音邮件系统 |
permission:android.permission.READ_CALENDAR | 允许程序读取用户的日程信息 |
permission:android.permission.WRITE_CALENDAR | 允许程序写入日程,但不可读取 |
permission:android.permission.CAMERA | 允许程序访问摄像头拍照 |
permission:android.permission.BODY_SENSORS | 允许应用程序访问用户使用的传感器来测量他的身体内发生了什么,如心率 |
permission:android.permission.ACCESS_FINE_LOCATION | 允许程序访问CellID或者Wifi热点来获取粗略的位置 |
permission:android.permission.ACCESS_COARSE_LOCATION | 允许程序访问CellID或者Wifi热点来获取粗略的位置 |
permission:android.permission.READ_EXTERNAL_STORAGE | 程序可以读取设备外设存储空间(内置SDcard和外置SDCard) |
permission:android.permission.WRITE_EXTERNAL_STORAGE | 允许程序写入外部存储 |
permission:android.permission.RECORD_AUDIO | 允许程序录制声音通过手机或耳机的麦克 |
permission:android.permission.READ_SMS | 允许程序读取短信内容 |
permission:android.permission.RECEIVE_WAP_PUSH | 允许程序接收WAP PUSH信息 |
permission:android.permission.RECEIVE_MMS | 允许程序接收彩信 |
permission:android.permission.RECEIVE_SMS | 允许程序接收短信 |
permission:android.permission.SEND_SMS | 允许程序发送短信 |
那么,怎么申请权限列?
首先,判断系统版本号,然后申请权限,如下:
if (Build.VERSION.SDK_INT > 23){
int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.READ_PHONE_STATE);
if (permission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.READ_PHONE_STATE},1);
}else {
Log.e("Permission","Permission is true");
}
}
然后重新权限申请的回调方法
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 1){
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.e("Permission","获取设备信息权限请求成功");
}else {
Log.e("Permission","获取设备信息权限请求失败");
}
}
}
这样子,我们就完成了一个完整的动态权限申请了。
安卓7.0
7.0之后访问外部的存储路径时,需要配置FrileProvider,否则无法得到存储的路径,配置方法如下:
在<application>里面添加
<provider
android:authorities="应用包名"
android:name="android.support.v4.content.FileProvider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"/>
</provider>
然后,在res下建立xml包,新建一个file_paths.xml文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<paths >
<root-path
name="root_path"
path="." />
</paths>
这样子,我们的应用就可以访问外部存储的文件了。
安卓8.0
安装应用时,需要添加权限
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
安卓9.0
9.0之后,使用okhttp时,http明文请求是无法发送的,需要改成https或者在Application属性中添加
android:usesCleartextTraffic="true"
即可