1. 程式人生 > >Android 6.0許可權管理以及動態申請,以定位許可權為例

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.好了,寫到這裡就已經完成了

完整原始碼下載地址: