一、為什麼需要許可權申請
Android 操作系統為了保障手機用戶的隱私和安全,對於手機上的一些敏感操作和個人信息,比如電話、簡訊記錄,相機、麥克風等設備的使用,需要向用戶申請許可權。每個應用需要使用的許可權種類和申請數量可能不同,但是確保用戶同意了應用使用的許可權才可以使用,否則應用無法運行或功能受限。
為了提供更好的用戶體驗和系統性能,系統提供了許可權管理功能,用戶可以在許可權管理中查看應用當前申請的許可權,並根據需要授予或者拒絕應用申請的許可權。
二、Android 許可權種類
Android 許可權分為三種:
- Normal permissions:屬於正常級別的許可權,當應用申請此類許可權時,系統會自動授予,無需用戶同意。
- Dangerous permissions:屬於危險級別的許可權,當應用申請此類許可權時,系統會提示用戶授權。如果用戶拒絕授權,應用的相應功能將被限制。
- Signature permissions:只有在應用具有相應簽名的情況下,才可以使用的許可權。如果應用未經授權或簽名不正確,系統不會授權此類許可權。
三、許可權申請的流程
許可權申請的流程分為以下幾個步驟:
- 在 Manifest 文件中聲明應用需要申請的許可權。
- 檢查應用需要申請的許可權是否已被授權。
- 如果未被授權,則向用戶請求授權。
- 在用戶授權後,根據獲取許可權的結果執行相應操作。
四、許可權申請的示例代碼
1、在 Manifest 文件中聲明需要申請的許可權
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapplication"> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ... </manifest>
2、檢查許可權是否已被授權
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { // 許可權未被授權,向用戶申請授權 } else { // 許可權已被授權,執行相應操作 }
3、向用戶請求授權
if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.CAMERA)) { // 如果應用之前請求過此許可權但是用戶拒絕了,可以向用戶解釋為什麼需要此許可權並再次請求授權 } else { // 申請許可權,requestCode 可以是任意值,在結果回調時會返回此值 ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA}, requestCode); }
4、獲取許可權結果並執行相應操作
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == CAMERA_REQUEST_CODE) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 用戶授權了相機許可權,執行相應操作 } else { // 用戶拒絕了相機許可權,應用相應策略 } } }
五、注意事項
在申請許可權時,需要注意以下幾點:
- 在應用中讓用戶清晰地知道為什麼需要此許可權。
- 在用戶拒絕授權時,應能夠 gracefully 的處理,如提供手動設置許可權、給予提示等方式。
- 在 Android 6.0 及以上版本中申請許可權時,應該實現動態申請許可權,同時也要保證兼容 Android 5.1 及以下版本,以便應用在更多設備上運行。
原創文章,作者:WUXXW,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/351518.html