天天看點

Android學習之6.0系統執行時權限設定

今天講講工作中遇見的6.0運作時權限處理問題。起因就是設定版本号更新時,在6.0系統會報錯,起因就是6.0動态權限設定,由于在google為了安全考慮,對于一些特定權限會征詢客戶授權,這當然會大大添加客戶資料的安全性,當然也會讓我們在工作中做一些小小的變動。以下就講一下我在工作中是怎樣解決這些問題的

首先copy一下6.0會征求使用者授權的權限

//聯系人的讀寫權限
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
//SMS短信權限
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           

以上copy自鴻洋大神的介紹,我就不多說了,大家了解一下即可了,以下我以版本号更新中的6.0權限為例,來學習一下怎樣動态加入權限

permission.WRITE_EXTERNAL_STORAGE是6.0權限,版本号更新會用到這個權限

private void uploadVersion() {
        //對權限進行檢測
        if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        //沒有權限時進行申請授權,context。權限數組。int請求碼
            ActivityCompat.requestPermissions(MainActivity.this,
                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1001);
        } else {
            //有權限時運作版本号更新接口
            GetVersionEngine engine = new GetVersionEngine(getRequestTag());
            engine.sendRequest();
        }
    }           

權限請求的處理

@Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 1001) {//比對請求碼
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                //權限設定成功,運作版本号更新接口
                GetVersionEngine engine = new GetVersionEngine(getRequestTag());
                engine.sendRequest();
            } else
            {
                // 權限拒絕。能夠進行提示
            }
        }
    }           

好啦,動态設定6.0權限還是非常easy的,大家了解一下即可了。基本的問題就是你要清楚哪些權限是6.0要動态擷取的權限。

以下推薦一個6.0權限使用庫,畢竟那麼多權限。我們一個一個設定還是非常麻煩的,是以要是提前就将我們要用到的6.0動态擷取權限都進行授權的話。那就友善多了

PermissionGen

用法:

加入依賴:

compile 'com.lovedise:permissiongen:0.0.6'           

請求權限的兩種方式:

PermissionGen.with(MainActivity.this)
    .addRequestCode(100)
    .permissions(
        Manifest.permission.READ_CONTACTS,
        Manifest.permission.RECEIVE_SMS,
        Manifest.permission.WRITE_CONTACTS)
    .request();           
PermissionGen.needPermission(ContactFragment.this, 100, 
    new String[] {
        Manifest.permission.READ_CONTACTS, 
        Manifest.permission.RECEIVE_SMS,
        Manifest.permission.WRITE_CONTACTS
    }
);           

權限請求結果

@Override public void onRequestPermissionsResult(int requestCode, String[] permissions,
      int[] grantResults) {
    PermissionGen.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
}           

請求成功

@PermissionSuccess(requestCode = 100)
public void doSomething(){
    Toast.makeText(this, "Contact permission is granted", Toast.LENGTH_SHORT).show();
}           
@PermissionFail(requestCode = 100)
public void doFailSomething(){
    Toast.makeText(this, "Contact permission is not granted", t.LENGTH_SHORT).show();
}