新特性

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"

即可

上一篇 下一篇

猜你喜欢

热点阅读