Android 6.0權限管理以及動態申請,以定位權限爲例

前言:

我們都知道現在手機系統已經到了很高的版本,在我們的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手動申請權限

 

 

 

 

 

 

 

發佈了86 篇原創文章 · 獲贊 101 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章