前言:
我們都知道現在手機系統已經到了很高的版本,在我們的Android6.0以後很多權限都被列入危險權限,都需要用戶手動去確認
1.我們先來看一下6.0以後被列爲危險級別的一些權限
組名稱 | 組下面的權限 |
---|---|
group:android.permission-group.CONTACTS(聯繫人組) | android.permission.WRITE_CONTACTS(寫入聯繫人) android.permission.GET_ACCOUNTS(查找設備上的帳戶) android.permission.READ_CONTACTS(讀取聯繫人) |
group:android.permission-group.PHONE(手機撥號) | android.permission.READ_CALL_LOG(讀取通話記錄) android.permission.READ_PHONE_STATE(讀取電話狀態) android.permission.CALL_PHONE(撥打電話) android.permission.WRITE_CALL_LOG(修改通話記錄) android.permission.USE_SIP(SIP視頻服務) android.permission.PROCESS_OUTGOING_CALLS(程序監視,修改或放棄撥出電話) com.android.voicemail.permission.ADD_VOICEMAIL(允許應用程序添加系統中的語音郵件) |
group:android.permission-group.CALENDAR(日曆) | android.permission.READ_CALENDAR(讀取日曆) android.permission.WRITE_CALENDAR(修改日曆) |
group:android.permission-group.CAMERA(相機) | android.permission.CAMERA(獲取拍照權限) |
group:android.permission-group.SENSORS(傳感器) | android.permission.BODY_SENSORS(獲取傳感器權限) |
group:android.permission-group.LOCATION(定位) | android.permission.ACCESS_FINE_LOCATION(通過gps獲取定位權限) android.permission.ACCESS_COARSE_LOCATION(通過wifi和移動基站獲取定位權限) |
group:android.permission-group.STORAGE(內存卡) | android.permission.READ_EXTERNAL_STORAGE(讀取內存卡) android.permission.WRITE_EXTERNAL_STORAGE(寫內存卡) |
group:com.sina.weibo.permission-group() | com.sina.weibo.permission.USER |
group:android.permission-group.MICROPHONE(麥克風) | android.permission.RECORD_AUDIO(錄音權限) |
group:android.permission-group.SMS(短信) | android.permission.READ_SMS(讀取短信) android.permission.RECEIVE_WAP_PUSH(接收WAP PUSH信息) android.permission.RECEIVE_MMS() android.permission.RECEIVE_SMS(接收短信權限) android.permission.SEND_SMS(發送短信) android.permission.READ_CELL_BROADCASTS(獲取小區廣播) |
2.今天我就拿定位來舉個例子來說下Android6.0以後這些權限的申請
首先我們要判斷權限是否開啓,開啓的話我們就直接去執行我們需要執行的方法,沒有開啓的話我們就要提示用戶去開啓
if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED){//未開啓定位權限
//開啓定位權限,200是標識碼
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},200);
}else{
startLocaion();//開始定位
Toast.makeText(MainActivity.this,"已開啓定位權限",Toast.LENGTH_LONG).show();
}
3.我們需要寫一個回調的方法,onRequestPermissionsResult,在我們需要申請權限的時候就會執行這個回調
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){
case 200://剛纔的識別碼
if(grantResults[0] == PackageManager.PERMISSION_GRANTED){//用戶同意權限,執行我們的操作
startLocaion();//開始定位
}else{//用戶拒絕之後,當然我們也可以彈出一個窗口,直接跳轉到系統設置頁面
Toast.makeText(MainActivity.this,"未開啓定位權限,請手動到設置去開啓權限",Toast.LENGTH_LONG).show();
}
break;
default:break;
}
}
4.要記得在Androidmainfest裏面標明權限
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
5.好了,寫到這裏就已經完成了
完整源碼下載地址:
Android 6.0手動申請權限