国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Android權(quán)限管理

baoxl / 2249人閱讀

摘要:要檢查是否具有某項權(quán)限,請調(diào)用方法。提供了多種權(quán)限請求方式。用戶只需要為每個權(quán)限組授予一次權(quán)限。注應用仍需要明確請求其需要的每項權(quán)限,即使用戶已向應用授予該權(quán)限組中的其他權(quán)限。此外,權(quán)限分組在將來的版本中可能會發(fā)生變化。

Android權(quán)限管理 說明

targetSdkVersion的值為23或者更高,就要進行權(quán)限管理,否則如果運行在Android6.0或以上的設(shè)備會沒有相應權(quán)限而導致崩潰

請求權(quán)限后,在onRequestPermissionsResult方法回調(diào),在該方法判斷三種狀態(tài):允許獲取權(quán)限、拒絕授予權(quán)限、拒絕授予權(quán)限且不再詢問

權(quán)限組

Android將不同的權(quán)限分組管理,分為正常權(quán)限和危險權(quán)限。正常權(quán)限是不用申請的。在申請危險權(quán)限時,系統(tǒng)會向用戶彈出一個申請權(quán)限的對話框,描述要獲取的權(quán)限所在的權(quán)限組,而不是具體的要申請的權(quán)限。只要獲得組內(nèi)的任一權(quán)限,那么默認該權(quán)限組的所有權(quán)限申請成功,再次申請該組內(nèi)的其他權(quán)限,系統(tǒng)將立刻授予權(quán)限,不會再顯示申請權(quán)限對話框

危險權(quán)限共9組24個

權(quán)限組 描述 權(quán)限
CALENDAR 日歷 READ_CALENDAR WRITE_CALENDAR
CAMERA 相機 CAMERA
CONTACTS 短信 READ_CONTACTS WRITE_CONTACTS GET_ACCOUNTS
LOCATION 定位 ACCESS_FINE_LOCATION ACCESS_COARSE_LOCATION
MICROPHONE 錄制音頻 RECORD_AUDIO
PHONE 電話 READ_PHONE_STATE CALL_PHONE READ_CALL_LOG WRITE_CALL_LOG ADD_VOICEMAIL USE_SIP PROCESS_OUTGOING_CALLS
SENSORS 傳感器 BODY_SENSORS
SMS 通訊錄 SEND_SMS RECEIVE_SMS READ_SMS RECEIVE_WAP_PUSH RECEIVE_MMS
STORAGE 存儲 READ_EXTERNAL_STORAGE WRITE_EXTERNAL_STORAGE
使用 使用步驟

在清單文件中加入要使用的權(quán)限,如果在清單文件中沒有事先聲明權(quán)限,那么在應用信息/權(quán)限中看到指定權(quán)限的

先判斷當前運行平臺是否在Android6.0以上,是的話就檢查是否已經(jīng)獲取到相應的危險權(quán)限

沒有相應的危險權(quán)限那么就需要去申請權(quán)限

onRequestPermissionsResult回調(diào)中查看結(jié)果,如果已經(jīng)獲取到權(quán)限,則去進行相應的操作。如果沒有獲取到權(quán)限,則有兩種可能:禁止或者是禁止且不再詢問。禁止的話,還能再下次使用時再去申請權(quán)限。如果是禁止且不再詢問,那么想要進行下一步操作只能到應用信息/權(quán)限界面去手動開啟權(quán)限了

檢查權(quán)限

==如果應用需要危險權(quán)限,則每次執(zhí)行需要這一權(quán)限的操作時都必須檢查自己是否具有該權(quán)限。用戶始終可以自由調(diào)用此權(quán)限,因此,即使應用昨天使用了相機,它不能假設(shè)自己今天仍具有該權(quán)限。==

要檢查是否具有某項權(quán)限,請調(diào)用 ContextCompat.checkSelfPermission() 方法。例如,以下代碼段顯示了如何檢查 Activity 是否具有在日歷中進行寫入的權(quán)限:

// Assume thisActivity is the current activity
int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,
        Manifest.permission.WRITE_CALENDAR);

如果應用具有此權(quán)限,方法將返回 PackageManager.PERMISSION_GRANTED,并且應用可以繼續(xù)操作。如果應用不具有此權(quán)限,方法將返回 PERMISSION_DENIED,且應用必須明確向用戶要求權(quán)限。

請求權(quán)限

如果應用需要應用清單中列出的危險權(quán)限,那么,它必須要求用戶授予該權(quán)限。Android 提供了多種權(quán)限請求方式。調(diào)用這些方法將顯示一個標準的 Android 對話框,不過,不能對它們進行自定義

解釋應用為什么需要權(quán)限

在某些情況下,可能需要幫助用戶了解應用為什么需要某項權(quán)限。例如,如果用戶啟動一個攝影應用,用戶對應用要求使用相機的權(quán)限可能不會感到吃驚,但用戶可能無法理解為什么此應用想要訪問用戶的位置或聯(lián)系人。在請求權(quán)限之前,不妨為用戶提供一個解釋。當然,只是一個解釋

為了幫助查找用戶可能需要解釋的情形,Android 提供了一個實用程序方法,即 shouldShowRequestPermissionRationale()。如果應用之前請求過此權(quán)限但用戶拒絕了請求,此方法將返回 true

:如果用戶在過去拒絕了權(quán)限請求,并在權(quán)限請求系統(tǒng)對話框中選擇了Don"t ask again選項,此方法將返回false。如果設(shè)備規(guī)范禁止應用具有該權(quán)限,此方法也會返回false
請求需要的權(quán)限

如果應用尚無所需的權(quán)限,則應用必須調(diào)用一個requestPermissions()方法,以請求適當?shù)臋?quán)限。應用將傳遞其所需的權(quán)限,以及指定用于識別此權(quán)限請求的整型請求代碼。此方法異步運行:它會立即返回,并且在用戶響應對話框之后,系統(tǒng)會使用結(jié)果調(diào)用應用的回調(diào)方法,將應用傳遞的相同請求代碼傳遞到requestPermissions()

:當應用調(diào)用requestPermissions()時,系統(tǒng)將向用戶顯示一個標準對話框。應用無法配置或更改此對話框。如果需要為用戶提供任何信息或解釋,應在用requestPermissions()之前進行,如解釋應用為什么需要權(quán)限中所述。
處理權(quán)限請求響應

當應用請求權(quán)限時,系統(tǒng)將向用戶顯示一個對話框。當用戶響應時,系統(tǒng)將調(diào)用應用的onRequestPermissionsResult()方法,向其傳遞用戶響應。應用必須替換該方法,以了解是否已獲得相應權(quán)限。回調(diào)會將傳遞的相同請求代碼傳遞給requestPermissions()

系統(tǒng)顯示的對話框說明了應用需要訪問的權(quán)限組;它不會列出具體權(quán)限。例如,如果請求READ_CONTACTS權(quán)限,系統(tǒng)對話框只顯示應用需要訪問設(shè)備的聯(lián)系人。用戶只需要為每個權(quán)限組授予一次權(quán)限。如果應用請求該組中的任何其他權(quán)限(已在應用清單中列出),系統(tǒng)將自動授予應用這些權(quán)限。當請求此權(quán)限時,系統(tǒng)會調(diào)用的onRequestPermissionsResult()回調(diào)方法,并傳遞PERMISSION_GRANTED,如果用戶已通過系統(tǒng)對話框明確同意權(quán)限請求,系統(tǒng)將采用相同方式操作。

:應用仍需要明確請求其需要的每項權(quán)限,即使用戶已向應用授予該權(quán)限組中的其他權(quán)限。此外,權(quán)限分組在將來的 Android 版本中可能會發(fā)生變化。代碼不應依賴特定權(quán)限屬于或不屬于相同組這種假設(shè)
權(quán)限被拒絕且不再詢問

這時候如果還堅持使用需要該權(quán)限的功能,那么就只能到應用詳情界面去手動打開權(quán)限了,然后回到代碼中再去檢查是否已經(jīng)獲得權(quán)限

//跳轉(zhuǎn)到應用詳情界面
Intent intent = new Intent()
intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS")
intent.setData(Uri.fromParts("package",getPackageName(), null));
startActivity(intent);
關(guān)鍵API

onRequestPermissionsResult

應用請求權(quán)限結(jié)果的回調(diào),無論是同意或拒絕,都會在這里得到結(jié)果

ActivityCompat.shouldShowRequestPermissionRationale

向用戶解釋為什么需要該權(quán)限。如果應用之前已經(jīng)請求過該權(quán)限且用戶拒絕,那么將返回true

ContextCompat.checkSelfPermission

用來檢查是否具有某種權(quán)限,如果應用具有此權(quán)限,方法將返回PackageManager.PERMISSION_GRANTED,并且應用可以繼續(xù)操作。如果應用不具有此權(quán)限,方法將返回PERMISSION_DENIED,且應用必須明確向用戶要求權(quán)限

ActivityCompat.requestPermissions

請求權(quán)限的方法,傳入需要請求的權(quán)限和整數(shù)請求碼

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/71673.html

相關(guān)文章

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<