今天講講工作中遇見的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();
}