android 6.0新特性

1、电源管理;
        应用待机
         Doze
2、app Link
   应用间的跳转
3、指纹识别
4、应用程序权限管理
5.0以后 用户可以关闭某些权限
6.0运行时权限--动态添加应用危险权限
三、移除Appache的HTTP Client(Apache HTTP Client Removal)

  Android6.0版本移除了对Appache的HTTP client的支持。如果你的app的目标版本是Android2.3(API level 9)或者更高,请使用HttpURLConnection类进行替换。此类采用了透明压缩(transparent compression)和响应缓存(response caching),最小化电量消耗。如果你希望继续使用Appache Http API,请修改你的build.gradle文件,增加如下:

  1. android {  
  2.     useLibrary 'org.apache.http.legacy'  
  3. }  

     
运行时权限:
         1。正常权限
         2。危险权限(读写sd卡)

检查权限

如果你需要一个危险的权限,就必须每次都检查你是否已经有权限了,所以如果有权限了,我们直接使用就可以了,如果没有那么就申请就好了


  1. int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,  
  2.         Manifest.permission.WRITE_CALENDAR);  
返回值就是是否已经有权限了,如果返回值是 PackageManager.PERMISSION_GRANTED,就证明有权限了,如果返回 PackageManager. PERMISSION_DENIED,那就证明还没有权限呢,

这是我们就要自己去申请


申请权限


  1. ActivityCompat.requestPermissions(thisActivity,  
  2.         new String[]{Manifest.permission.READ_CONTACTS},  
  3.         MY_PERMISSIONS_REQUEST_READ_CONTACTS);  
调用这个方法之后,会弹出一个标准的dialog,这个是不能被我们自定义的啊,长啥死样就看各个厂商了。

但是呢,我们可以在弹框之前,单独弹一个窗口,来告诉为什么要申请权限,然后再去弹这个系统框,这样用户就会更加了解你为什么需要这个权限了。

所以我们的完整代码如下:


  1. // Here, thisActivity is the current activity  
  2. if (ContextCompat.checkSelfPermission(thisActivity,  
  3.                 Manifest.permission.READ_CONTACTS)  
  4.         != PackageManager.PERMISSION_GRANTED) {  
  5.   
  6.     if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,  
  7.             Manifest.permission.READ_CONTACTS)) {  
  8.   
  9.         // Show an expanation to the user *asynchronously* -- don't block  
  10.         // this thread waiting for the user's response! After the user  
  11.         // sees the explanation, try again to request the permission.  
  12.   
  13.     } else {  
  14.   
  15.         ActivityCompat.requestPermissions(thisActivity,  
  16.                 new String[]{Manifest.permission.READ_CONTACTS},  
  17.                 MY_PERMISSIONS_REQUEST_READ_CONTACTS);  
  18.   
  19.         // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an  
  20.         // app-defined int constant. The callback method gets the  
  21.         // result of the request.  
  22.     }  
  23. }  

上面的大多数方法,我们都已经讲过了,根据注释,也理解了每一段都干了什么,

唯一需要额外说一下的是


  1. ActivityCompat.shouldShowRequestPermissionRationale()  
  • 如果我们的应用在之前请求过权限,但是用户拒绝了我们的请求,返回true

  • 如果用户在之前关闭了权限,并且在请求对弹框时,选择了 Don't ask again 选项,返回false
  • 如果设备方针拒绝这个应用拥有这个权限,返回false
上面是google说的几点,下面我再解释成人话,就是说:
我们第一次调用这里,肯定是返回false的,就会弹出来系统弹框,问你同不同意啊,
如果你同意了,以后就没这里什么事了
如果要是不同意呢,以后就会返回true,
那咱们就得弹个框,告诉用户问什么要权限,最好再有个同意按钮
         
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值