Android M新改变

来源:互联网 发布:http服务默认端口号 编辑:程序博客网 时间:2024/05/08 17:30

随着Android 6.0的发布,Android M在功能和特性上面有了一些新的变化,这些变化包括Runtime Permissions(运行时权限)、Doze and App Standby、Apache HTTP Client Removal、BoringSSL、Access to Hardware Identifier、Notifications、AudioManager Changes、Text Selection、Browser Bookmark Changes、Android Keystore Changes、Wi-Fi and Networking Changes、Camera Service Changes、Runtime、APK Validation、USB Connection、Android for Work Changes。下面分别介绍一下这些变化。

  • Runtime Permissions(运行时权限)

    • 什么是运行时权限
      在之前的Android版本中如果我们的APP需要权限,只需要在manifest文件中声明即可使用,用户在安装APP后可以随意使用。但是Android M对权限进行了加强处理,我们早manifest文件中声明之后,在使用到相关的功能时需要重新授权才能使用,当然并不是所有的权限都需要重新授权,这些需要重新授权的权限成为Runtime Permission.
    • 运行时权限存在哪些影响
      运行时权限对于用户来说更加方便、更加透明可见,用户可以更加直观的管理自己的权限,更好的保护了用户的隐私。但是对于开发者来说那就是又要多加判断啦~~(>_<)~~
    • 哪些权限是运行时权限呢
      Google将权限分为两类:一类是Normal Permissions,这类权限一般不涉及用户隐私,是不需要用户进行授权的,比如手机震动、访问网络等;另一类是Dangerous Permission,一般是涉及到用户隐私的,需要用户进行授权,比如读取sdcard、访问通讯录等。

      • Normal Permission
        • ACCESS_LOCATION_EXTRA_COMMANDS允许应用程序访问额外的位置提供程序命令。
        • ACCESS_NETWORK_STATE允许程序访问有关网络的信息。
        • ACCESS_NOTIFICATION_POLICY为应用标记希望访问通知策略的权限。(Added in API level 23)
        • ACCESS_WIFI_STATE允许应用程序访问Wi-Fi网络的信息。
        • BLUETOOTH允许应用程序连接到已配对的蓝牙设备。
        • BLUETOOTH_ADMIN允许应用程序发现和配对蓝牙设备。
        • BROADCAST_STICKY允许应用程序使用粘性广播,这些广播数据由该系统被完成之后保持,以便客户端可以快速地检索数据,而不必等待下一个广播。
        • CHANGE_NETWORK_STATE允许应用程序改变网络连接状态。
        • CHANGE_WIFI_MULTICAST_STATE允许应用程序进入的Wi-Fi多播模式。(Added in API level 4)
        • CHANGE_WIFI_STATE允许应用程序改变Wi-Fi连接状态
        • DISABLE_KEYGUARD允许应用程序禁用键盘锁,如果它是不安全的。
        • EXPAND_STATUS_BAR允许应用程序展开或折叠状态栏。
        • GET_PACKAGE_SIZE 允许应用程序找出任何package占用的空间。
        • INSTALL_SHORTCUT允许应用程序安装快捷方式。(Added in API level 19)
        • INTERNET允许应用程序连接网络。
        • KILL_BACKGROUND_PROCESSES允许应用程序杀死后台进程。(Added in API level 8)
        • MODIFY_AUDIO_SETTINGS允许应用程序修改全局的音频设置。
        • NFC允许应用程序通过NFC进行I / O操作。(Added in API level 9)
        • READ_SYNC_SETTINGS允许应用程序读取同步设置。
        • READ_SYNC_STATS允许应用程序读取同步状态。
        • RECEIVE_BOOT_COMPLETED允许应用程序接收系统启动之后的广播。
        • REORDER_TASKS允许应用程序修改任务的Z顺序(不明白是什东东o(╯□╰)o)
        • REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
        • REQUEST_INSTALL_PACKAGES
        • SET_ALARM允许应用程序广播一个Intent设置为用户报警。(Added in API level 9)
        • SET_TIME_ZONE允许应用程序设置系统时区。
        • SET_WALLPAPER允许应用程序设置壁纸。
        • SET_WALLPAPER_HINTS允许应用程序设置壁纸提示。
        • TRANSMIT_IR允许使用该设备的红外线发射器,如果有的话。
        • UNINSTALL_SHORTCUT允许应用程序卸载启动的快捷方式。
        • USE_FINGERPRINT允许应用程序使用指纹硬件。(Added in API level 23)
        • VIBRATE允许访问震动。
        • WAKE_LOCK允许使用PowerManager WakeLocks让处理器进入休眠或屏幕变暗。
        • WRITE_SYNC_SETTINGS允许应用程序写入同步设置。
      • Dangerous Permission
        所有的危险权限均属于权限组,这些危险权限也就是运行时权限

        • 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

      同一组的任何一个权限被授权了,其他权限也自动被授权。

    • 运行时权限相关API
        直接开始说步骤
        1. 在manifest中添加所需要的权限,这一步和之前的权限声明并没有什么区别,如果试图去请求一个没有声明的权限,程序很有可能直接崩溃。
        2. 检查权限,这里涉及到一个API,ContextCompat.checkSelfPermission,主要用于检测某个权限是否已经被授予,方法返回值为PackageManager.PERMISSION_DENIED或者PackageManager.PERMISSION_GRANTED。当返回DENIED就需要进行申请授权了。
        

          if (ContextCompat.checkSelfPermission(thisActivity,                Manifest.permission.READ_CONTACTS)                != PackageManager.PERMISSION_GRANTED) {               //没有授权     }else{    //    }

        3. 申请授权,该方法是异步的,第一个参数是Context;第二个参数是需要申请的权限的字符串数组;第三个参数为requestCode,主要用于回调的时候检测。可以从方法名requestPermissions以及第二个参数看出,是支持一次性申请多个权限的,系统会通过对话框逐一询问用户是否授权。
        

      “`
      ActivityCompat.requestPermissions(thisActivity,
      new String[]{Manifest.permission.READ_CONTACTS},
      MY_PERMISSIONS_REQUEST_READ_CONTACTS);

 4. 处理权限申请回调,对于权限的申请结果,首先验证requestCode定位到你的申请,然后验证grantResults对应于申请的结果,这里的数组对应于申请时的第二个权限字符串数组。如果你同时申请两个权限,那么grantResults的length就为2,分别记录你两个权限的申请结果。如果申请成功,就可以做你的事情了~            @Override            public void onRequestPermissionsResult(int requestCode,                    String permissions[], int[] grantResults) {                switch (requestCode) {                        case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {                        // If request is cancelled, the result arrays are empty.                        if (grantResults.length > 0                                            && grantResults[0] ==                                                                     PackageManager.PERMISSION_GRANTED) {                            // permission was granted, yay! Do the                            // contacts-related task you need to do.                        } else {                                // permission denied, boo! Disable the                                // functionality that depends on this permission.                        }                    return;                    }                   }                }    综上4个步骤,对于运行时的权限的处理已经说完了,不过呢,还有一个API也是很重要的,就是用户在上一次已经拒绝过你的这个权限申请。也就是说,用户已经拒绝一次了,你又弹个授权框,你需要给用户一个解释,为什么要授权,则使用该方法。        // Should we show an explanation?        if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,                        Manifest.permission.READ_CONTACTS))         // Show an expanation to the user *asynchronously* -- don't block        // this thread waiting for the user's response! After the user        // sees the explanation, try again to request the permission.        }总结一下,将上面的几个步骤整合到一起就成了下面的这段代码:// Here, thisActivity is the current activityif (ContextCompat.checkSelfPermission(thisActivity,                Manifest.permission.READ_CONTACTS)        != PackageManager.PERMISSION_GRANTED) {    // Should we show an explanation?    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,            Manifest.permission.READ_CONTACTS)) {        // Show an expanation to the user *asynchronously* -- don't block        // this thread waiting for the user's response! After the user        // sees the explanation, try again to request the permission.    } else {        // No explanation needed, we can request the permission.        ActivityCompat.requestPermissions(thisActivity,                new String[]{Manifest.permission.READ_CONTACTS},                MY_PERMISSIONS_REQUEST_READ_CONTACTS);        // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an        // app-defined int constant. The callback method gets the        // result of the request.    }}
  • 其他改变会在以后继续更新,(づ ̄ 3 ̄)づ
0 0
原创粉丝点击