android 6.0+ 動態權限 拒絕不再詢問后跳轉設置應用詳情頁面


 android 6.0+ 的權限 需要動態申請 這里的權限針對的是 敏感權限:

SMS(短信)
SEND_SMS
RECEIVE_SMS
READ_SMS
RECEIVE_WAP_PUSH
RECEIVE_MMS
STORAGE(存儲卡)
READ_EXTERNAL_STORAGE
WRITE_EXTERNAL_STORAGE
CONTACTS(聯系人)
READ_CONTACTS
WRITE_CONTACTS
GET_ACCOUNTS
PHONE(手機)
READ_PHONE_STATE
CALL_PHONE
READ_CALL_LOG
WRITE_CALL_LOG
ADD_VOICEMAIL
USE_SIP
PROCESS_OUTGOING_CALLS
CALENDAR(日歷)
READ_CALENDAR
WRITE_CALENDAR
CAMERA(相機)
CAMERA
LOCATION(位置)
ACCESS_FINE_LOCATION
ACCESS_COARSE_LOCATION
SENSORS(傳感器)
BODY_SENSORS
MICROPHONE(麥克風)
RECORD_AUDIO

一共用到 以下方法:

  • ContextCompat.checkSelfPermission
    檢查應用是否具有某個危險權限。如果應用具有此權限,方法將返回 PackageManager.PERMISSION_GRANTED,並且應用可以繼續操作。如果應用不具有此權限,方法將返回 PackageManager.PERMISSION_DENIED,且應用必須明確向用戶要求權限。

  • ActivityCompat.requestPermissions
    應用可以通過這個方法動態申請權限,調用后會彈出一個對話框提示用戶授權所申請的權限。

  • ActivityCompat.shouldShowRequestPermissionRationale
    如果應用之前請求過此權限但用戶拒絕了請求,此方法將返回 true。如果用戶在過去拒絕了權限請求,並在權限請求系統對話框中選擇了 Don't ask again 選項,此方法將返回 false。如果設備規范禁止應用具有該權限,此方法也會返回 false。

  • onRequestPermissionsResult
    當應用請求權限時,系統將向用戶顯示一個對話框。當用戶響應時,系統將調用應用的 onRequestPermissionsResult() 方法,向其傳遞用戶響應,處理對應的場景

 

例:

<uses-permission android:name="android.permission.READ_CONTACTS" />
private void requestPermission() {
if(Build.VERSION.SDK_INT>=23){
if (ContextCompat.checkSelfPermission(this,Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
//此處一般直接去申請對應的權限 有必要時可以去做判斷 if (ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.READ_CONTACTS)) { Log.i(TAG,"shouldShowRequestPermissionRationale"); ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_CONTACTS},MY_PERMISSIONS_REQUEST_READ_CONTACTS); } else {

ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_CONTACTS},MY_PERMISSIONS_REQUEST_READ_CONTACTS);
   }
}else{
//這里是權限已經授予了 去做該做的事

}
}

}

 重寫Activity 的  onRequestPermissionsResult方法 接收回調

 @Override public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) { switch (requestCode) { case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { Log.i(TAG,"onRequestPermissionsResult granted"); } else { Log.i(TAG,"onRequestPermissionsResult denied");
//彈出框 讓用戶去應用詳情頁手動設置權限
showWaringDialog(); } return; } } } private void showWaringDialog() { AlertDialog dialog = new AlertDialog.Builder(this) .setTitle("警告!") .setMessage("請前往設置->應用->PermissionDemo->權限中打開相關權限,否則功能無法正常運行!") .setPositiveButton("確定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) {

               Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);

                 Uri uri = Uri.fromParts("package", getPackageName(), null);

                 intent.setData(uri);            }

        }).show();
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM