Android6.0新特性以及权限申请

背景:

Android6.0称为Marshmallow(棉花糖),在2015年5月28日Google的I/O大会上首次露面,十月份正式发布并推送,至今已经一年多的时间了,所占市场份额在4.7%左右,更新了比较多的模块,当然主要是对Android系统进行了优化,对于我们开发者来说主要是应用权限的管理。


Android6.0新特性以及权限申请_第1张图片
数据截止17年2月15日

主要更新内容:

电源管理:

继在5.0中加入了节电模式之后,Google在原有的电源管理的基础上加入了两种新的状态:

  • App Standby-应用待机状态

当系统检测到设备不充电,且用户没有直接或间接启动该应用时,该应用进入应用待机状态,而反之(当应用被激活或者设备在充电时)系统将该应用移出应用待机状态。

App Standby指的是系统会自动停用那些许久不用的应用,从而达到节省电量和减少后台占用的作用。

  • Doze-系统休眠状态

当系统检测到设备不充电,且设备静止灭屏一段时间会进入休眠状态,而如此周期性检测,状态不改变则会进入更长的休眠状态,一直到进入饱和休眠状态。

Doze 的原理是通过对传感器的监控,来判断机器是否处于使用状态。当 Doze 认为机器长时间处于待机状态的时候,它会自动暂停绝大部分后台应用,同时关闭网络连接,仅在需要时偶尔连接,如此来达到在待机时节省电量的效果。


Android6.0新特性以及权限申请_第2张图片
图片引自Android Developer

从这张图我们可以看到,系统进入Doze模式后,系统会隔一段时间处理正在挂起的任务,随着时间推移,后面间隔的时间会越来越长,以此来减少电量消耗。

App Links (App深链接):

谷歌在Android 6.0上新加入App Links,允许开发者将App和Web站点关联。这一举措旨在鼓励应用程序间关联,弱化浏览器的使用。比如说用户点击淘宝某件商品的链接,在用户安装了淘宝APP的情况下优先考虑跳转到淘宝APP。

指纹识别:

在6.0以前的指纹识别是各家手机厂商自己研发,弊端在于加剧了Android系统的碎片化,而且各家厂商的指纹识别也是良莠不齐,6.0以后谷歌为Android提供指纹识别API,厂商只需要提供硬件支持即可。

Android Pay:

新的6.0系统中集成了Android Pay。其特性在于简洁、安全、可选性。Android Pay是一个开放性平台,使用户就可以选择谷歌的服务或者使用银行的APP来使用它,Android Pay向下兼容到Android 4.4,同时支付功能可以使用指纹来进行支付,但事实上各家厂商并不买账。

应用权限管理:

关于应用权限的问题,一直是Android 系统被人所诟病的一点,存在了很大的安全漏洞。一直以来如果 Android 用户不想让某些 App 读取地理信息数据或者访问通讯录,只能靠第三方软件或者第三方 ROM 的内置功能来实现,而且在使用的时候可能需要 Root 权限等,极为麻烦,而谷歌显然是意识到了这点,首先看下Android 系统的权限模型变化:

  • 5.0以前,只需要在Manifest清单文件中注册声明即可永久使用;
  • 5.0以后,用户在安装时可以选择关闭某些权限;
  • 6.0以后,权限类型划分,对于一些危险或隐私权限会让用户选择是否授权;

Android6.0对权限进行了分类,具体可分为:

  • Normal Premission:普通权限
  • Dangerous Permission/Group: 危险权限/组
    普通权限,跟之前一样只需要在AndroidManifest.xml中申请即可,而对于危险权限,则是需要单独跟用户申请的权限(运行时权限)。

以下是普通权限,只需要在AndroidManifest.xml中申请即可:

  android.permission.ACCESS_LOCATION_EXTRA_COMMANDS
  android.permission.ACCESS_NETWORK_STATE
  android.permission.ACCESS_NOTIFICATION_POLICY
  android.permission.ACCESS_WIFI_STATE
  android.permission.ACCESS_WIMAX_STATE
  android.permission.BLUETOOTH
  android.permission.BLUETOOTH_ADMIN
  android.permission.BROADCAST_STICKY
  android.permission.CHANGE_NETWORK_STATE
  android.permission.CHANGE_WIFI_MULTICAST_STATE
  android.permission.CHANGE_WIFI_STATE
  android.permission.CHANGE_WIMAX_STATE
  android.permission.DISABLE_KEYGUARD
  android.permission.EXPAND_STATUS_BAR
  android.permission.FLASHLIGHT
  android.permission.GET_ACCOUNTS
  android.permission.GET_PACKAGE_SIZE
  android.permission.INTERNET
  android.permission.KILL_BACKGROUND_PROCESSES
  android.permission.MODIFY_AUDIO_SETTINGS
  android.permission.NFC
  android.permission.READ_SYNC_SETTINGS
  android.permission.READ_SYNC_STATS
  android.permission.RECEIVE_BOOT_COMPLETED
  android.permission.REORDER_TASKS
  android.permission.REQUEST_INSTALL_PACKAGES
  android.permission.SET_TIME_ZONE
  android.permission.SET_WALLPAPER
  android.permission.SET_WALLPAPER_HINTS
  android.permission.SUBSCRIBED_FEEDS_READ
  android.permission.TRANSMIT_IR
  android.permission.USE_FINGERPRINT
  android.permission.VIBRATE
  android.permission.WAKE_LOCK
  android.permission.WRITE_SYNC_SETTINGS
  com.android.alarm.permission.SET_ALARM
  com.android.launcher.permission.INSTALL_SHORTCUT
  com.android.launcher.permission.UNINSTALL_SHORTCUT

以下是危险权限,需单独申请,共分为9组(危险权限组),每组只要有一个权限申请成功了,就默认整组权限都可以使用了。

    group:android.permission-group.CONTACTS
    permission:android.permission.WRITE_CONTACTS
    permission:android.permission.GET_ACCOUNTS    
    permission:android.permission.READ_CONTACTS

    group:android.permission-group.PHONE
    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
    permission:android.permission.PROCESS_OUTGOING_CALLS
    permission:com.android.voicemail.permission.ADD_VOICEMAIL

    group:android.permission-group.CALENDAR
    permission:android.permission.READ_CALENDAR
    permission:android.permission.WRITE_CALENDAR

    group:android.permission-group.CAMERA
    permission:android.permission.CAMERA

    group:android.permission-group.SENSORS
    permission:android.permission.BODY_SENSORS

    group:android.permission-group.LOCATION
    permission:android.permission.ACCESS_FINE_LOCATION
    permission:android.permission.ACCESS_COARSE_LOCATION

    group:android.permission-group.STORAGE
    permission:android.permission.READ_EXTERNAL_STORAGE
    permission:android.permission.WRITE_EXTERNAL_STORAGE

    group:android.permission-group.MICROPHONE
    permission:android.permission.RECORD_AUDIO

    group:android.permission-group.SMS
    permission:android.permission.READ_SMS
    permission:android.permission.RECEIVE_WAP_PUSH
    permission:android.permission.RECEIVE_MMS
    permission:android.permission.RECEIVE_SMS
    permission:android.permission.SEND_SMS
    permission:android.permission.READ_CELL_BROADCASTS
申请步骤:
  • 将targetSdkVersion设置为23,注意,如果你将targetSdkVersion设置为>=23,则必须按照Android谷歌的要求,动态的申请权限,如果你暂时不打算支持动态权限申请,则targetSdkVersion最大只能设置为22。
  • 在AndroidManifest.xml中申请你需要的权限,包括普通权限和需要申请的特殊权限,这样做是为了兼容6.0以下的版本
  • 申请权限,此处分为3步:
  1. 检查是否由此权限checkSelfPermission(),如果已经开启,则不需要再申请。
  2. 如果未开启,则判断是否需要向用户解释为何申请权限shouldShowRequestPermissionRationale。
  3. 如果需要(即返回true),则可以弹出对话框提示用户申请权限原因,用户确认后申请权限requestPermissions(),如果不需要(即返回false),则直接申请权限requestPermissions()。

你可能感兴趣的:(Android6.0新特性以及权限申请)