Android開發中權限配置


  對於Android開發來說,經常需要申請權限,Android6.0以前,所有權限的配置只需要在配置文件AndroidManifest.xml中編寫權限配置就可以了,但Android6.0以后版本中,Google為了提高系統的安全性,當APP需要用到用戶隱私權限時需要進行權限配置,除了在配置文件AndroidManifest.xml中編寫權限配置之外,還需要手動進行權限適配。申請權限的方式有以下兩種:

  ①、在配置文件AndroidManifest.xml中編寫權限配置

  ②、在邏輯代碼中動態申請權限授權

  Android權限可以分為兩大類:普通權限和高級權限。

一、普通權限

  常見的普通權限如下所示。

 1 ACCESS_LOCATION_EXTRA_COMMANDS   定位權限
 2 ACCESS_NETWORK_STATE         網絡狀態權限
 3 ACCESS_NOTIFICATION_POLICY      通知 APP通知顯示在狀態欄
 4 ACCESS_WIFI_STATE WiFi         狀態權限
 5 BLUETOOTH                      使用藍牙權限
 6 BLUETOOTH_ADMIN             控制藍牙開關
 7 BROADCAST_STICKY            粘性廣播
 8 CHANGE_NETWORK_STATE           改變網絡狀態
 9 CHANGE_WIFI_MULTICAST_STATE     改變WiFi多播狀態,應該是控制手機熱點(猜測)
10 CHANGE_WIFI_STATE           控制WiFi開關,改變WiFi狀態
11 DISABLE_KEYGUARD              改變鍵盤為不可用
12 EXPAND_STATUS_BAR            擴展bar的狀態
13 GET_PACKAGE_SIZE            獲取應用安裝包大小
14 INTERNET                網絡權限
15 KILL_BACKGROUND_PROCESSES      殺死后台進程
16 MODIFY_AUDIO_SETTINGS         改變音頻輸出設置
17 NFC                   支付
18 READ_SYNC_SETTINGS           獲取手機設置信息
19 READ_SYNC_STATS             數據統計
20 RECEIVE_BOOT_COMPLETED        監聽啟動廣播
21 REORDER_TASKS             創建新棧
22 REQUEST_INSTALL_PACKAGES       安裝應用程序
23 SET_TIME_ZONE              允許應用程序設置系統時間區域
24 SET_WALLPAPER              設置壁紙
25 SET_WALLPAPER_HINTS          設置壁紙上的提示信息,個性化語言
26 TRANSMIT_IR               紅外發射
27 USE_FINGERPRINT             指紋識別
28 VIBRATE                  震動
29 WAKE_LOCK                 鎖屏
30 WRITE_SYNC_SETTINGS            改變設置
31 SET_ALARM                    設置警告提示
32 INSTALL_SHORTCUT               創建快捷方式
33 UNINSTALL_SHORTCUT           刪除快捷方式

  在AndroidManifest.xml文件中的配置方式如下:

1 //XXXX為需要配置的權限名稱
2 <uses-permission android:name="android.permission.XXXX"/>

二、高級權限

  高級權限如下所示。

 1 READ_CALENDAR        日歷
 2 WRITE_CALENDAR        日歷
 3 CAMERA            相機
 4 READ_CONTACTS         聯系人
 5 WRITE_CONTACTS        聯系人
 6 GET_ACCOUNTS         聯系人
 7 ACCESS_FINE_LOCATION    位置
 8 ACCESS_COARSE_LOCATION  位置
 9 RECORD_AUDIO         麥克風
10 READ_PHONE_STATE       電話
11 CALL_PHONE          電話
12 READ_CALL_LOG        電話
13 WRITE_CALL_LOG        電話
14 ADD_VOICEMAIL        電話
15 USE_SIP            電話
16 PROCESS_OUTGOING_CALLS  電話
17 BODY_SENSORS         傳感器
18 SEND_SMS           短信
19 RECEIVE_SMS         短信
20 READ_SMS           短信
21 RECEIVE_WAP_PUSH      短信
22 RECEIVE_MMS         短信
23 READ_EXTERNAL_STORAGE  存儲
24 WRITE_EXTERNAL_STORAGE 存儲

  動態權限申請的邏輯代碼如下所示(以官方讀寫內存為例):

 1 public void requestAllPower() {
 2         if (ContextCompat.checkSelfPermission(this,
 3                 Manifest.permission.WRITE_EXTERNAL_STORAGE)
 4                 != PackageManager.PERMISSION_GRANTED) {
 5             if (ActivityCompat.shouldShowRequestPermissionRationale(this,
 6                     Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
 7             } else {
 8                 ActivityCompat.requestPermissions(this,
 9                         new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
10                                 Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
11             }
12         }
13     }

  判斷動態申請權限的結果代碼如下:

 1 @Override
 2     public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
 3         super.onRequestPermissionsResult(requestCode, permissions, grantResults);
 4 
 5         if (requestCode == 1) {
 6             for (int i = 0; i < permissions.length; i++) {
 7                 if (grantResults[i] == PERMISSION_GRANTED) {
 8                     Toast.makeText(this, "" + "權限" + permissions[i] + "申請成功", Toast.LENGTH_SHORT).show();
 9                 } else {
10                     Toast.makeText(this, "" + "權限" + permissions[i] + "申請失敗", Toast.LENGTH_SHORT).show();
11                 }
12             }
13         }
14     }

  對於動態權限申請,可以采用封裝好的權限申請框架方便的處理權限申請問題,這樣有利於代碼的重用和整潔性,可以參考以下幾個鏈接:

  ①、https://blog.csdn.net/fireqiang2/article/details/78343233

  ②、https://blog.csdn.net/wdd1324/article/details/79402573

  ③、https://blog.csdn.net/jsxin0816/article/details/78605731

  ④、https://www.jianshu.com/p/52e66d9e4a9a


免責聲明!

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



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