1. 程式人生 > 其它 >執行時許可權

執行時許可權

許可權分為普通許可權和危險許可權,其中危險許可權有9組24個。

在Android 6以上的系統中執行授權,如果該許可權屬於危險許可權,那麼此時要進行執行時許可權處理,如果不是危險許可權,則只要在AndroidManifest.xml檔案中新增一下許可權宣告即可。

注意:一旦授予APP某個危險許可權,則該許可權所在許可權組的其他危險許可權一併被授予。

  1. 在Android 8以上的系統中,若要APP執行撥打電話的邏輯,則需要進行授權處理,而CALL_PHONE許可權為危險許可權,所以我們要進行執行時許可權授予。在執行時許可權授予的邏輯中,首先判斷該許可權是否被授予,如果許可權已被授予,執行相關的操作。
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) 

  1. 如果沒被授予,申請授予許可權。此時,會彈出選擇框,讓使用者選擇是否授予該許可權。使用者選擇後,會呼叫onRequestPermissionsResult()。
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, 1)

  1. 我們需要在該Activity中重寫onRequestPermissionsResult()
    ,之後在方法中判斷grantResults的長度和值來確定使用者是否授權。
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull @org.jetbrains.annotations.NotNull String[] permissions, 
@NonNull @org.jetbrains.annotations.NotNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode) {
        case 1:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                readContacts();
            } else {
                Toast.makeText(this, "you denied the permission", Toast.LENGTH_LONG).show();
            }
            break;
        default:
    }
}