不知道Android開發中有哪些權限?看這裏

嘚吧嘚

在使用內容提供器的時候很多情況下會使用到很多危險權限,如通訊錄、攝像機、撥打電話、發送短信… …等權限。

普通權限AndroidManifest.xml中配置一下聲明權限就可以了使用了,如

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.test">
	
	<!-- 振動權限 -->
    <uses-permission android:name="android.permission.VIBRATE" /> 
	
	......
	
</manifest>

危險權限不僅需要在AndroidManifest.xml中配置聲明權限,還需要用戶授權才能使用。

危險權限及其分組

注意:危險權限同一組內有一項權限被授權,則一組權限都被授權。

編號 權限組 權限
1 CONTACTS (聯繫人) android.permission.READ_CONTACTS
android.permission.WRITE_CONTACTS
android.permission.GET_ACCOUNTS
2 PHONE (手機) android.permission.READ_CALL_LOG
android.permission.READ_PHONE_STATE
android.permission.CALL_PHONE
android.permission.WRITE_CALL_LOG
android.permission.USE_SIP
android.permission.PROCESS_OUTGOING_CALLS
com.android.voicemail.permission.ADD_VOICEMAIL
3 CALENDAR (日曆) android.permission.READ_CALENDAR
android.permission.WRITE_CALENDAR
4 CAMERA (相機) android.permission.CAMERA
5 SENSORS (傳感器) android.permission.BODY_SENSORS
6 LOCATION (位置) android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_COARSE_LOCATION
7 STORAGE (存儲卡) android.permission.READ_EXTERNAL_STORAGE
android.permission.WRITE_EXTERNAL_STORAGE
8 MICROPHONE (麥克風) android.permission.RECORD_AUDIO
9 SMS (短信) android.permission.READ_SMS
android.permission.RECEIVE_WAP_PUSH
android.permission.RECEIVE_MMS
android.permission.RECEIVE_SMS
android.permission.SEND_SMS
aandroid.permission.READ_CELL_BROADCASTS

所有權限及說明

編號 權限 說明
1 ACCESS_CHECKIN_PROPERTIES 允許讀寫訪問”properties”表在checkin數據庫中,改值可以修改上傳
2 ACCESS_COARSE_LOCATION 允許一個程序訪問CellID或 WiFi熱點來獲取粗略的位置
3 ACCESS_FINE_LOCATION 允許一個程序訪問CellID或 WiFi熱點來獲取粗略的位置
4 ACCESS_LOCATION_EXTRA_COMMANDS 允許應用程序訪問額外的位置提供命令
5 ACCESS_NETWORK_STATE 允許程序獲取網絡信息狀態,如當前的網絡連接是否有效
6 ACCESS_NOTIFICATION_POLICY 希望訪問通知策略的應用程序的標記許可
7 ACCESS_WIFI_STATE 允許程序獲取當前WiFi接入的狀態以及WLAN熱點的信息
8 ACCOUNT_MANAGER 允許程序通過賬戶驗證方式訪問賬戶管理ACCOUNT_MANAGER相關信息
9 ADD_VOICEMAIL 允許一個應用程序添加語音郵件系統
10 BATTERY_STATS 允許程序更新手機電池統計信息
11 BIND_ACCESSIBILITY_SERVICE 請求accessibilityservice服務,以確保只有系統可以綁定到它
12 BIND_APPWIDGET 允許程序告訴appWidget服務需要訪問小插件的數據庫,只有非常少的應用纔用到此權限
13 BIND_CARRIER_MESSAGING_SERVICE API等級高於23時使用,否則使用BIND_CARRIER_SERVICES
14 BIND_CARRIER_SERVICES 允許綁定到運營商應用程序中的服務的系統進程將有這個權限
15 BIND_CHOOSER_TARGET_SERVICE 必須由ChooserTargetService要求,確保只有系統可以綁定到它
16 BIND_DEVICE_ADMIN 請求系統管理員接收者receiver,只有系統才能使用
17 BIND_DREAM_SERVICE 必須由一個DreamService要求,確保只有系統可以綁定到它
18 BIND_INCALL_SERVICE 必須由一個MidiDeviceService要求,確保只有系統可以綁定到它
19 BIND_INPUT_METHOD 請求InputMethodService服務,只有系統才能使用
20 BIND_MIDI_DEVICE_SERVICE 必須由一MidiDeviceService要求,確保只有系統可以綁定到它
21 BIND_NFC_SERVICE 由HostApduServiceOffHostApduService必須確保只有系統可以綁定到它
22 BIND_NOTIFICATION_LISTENER_SERVICE 必須要求由notificationlistenerservice,以確保只有系統可以綁定到它
23 BIND_PRINT_SERVICE 必須要求由printservice,以確保只有系統可以綁定到它
24 BIND_REMOTEVIEWS 必須通過RemoteViewsService服務來請求,只有系統才能用
25 BIND_TELECOM_CONNECTION_SERVICE 必須由ConnectionService要求,確保只有系統可以綁定到它
26 BIND_TEXT_SERVICE 必須要求textservice,以確保只有系統可以綁定到它
27 BIND_TV_INPUT 必須由TvInputService需要確保只有系統可以綁定到它
28 BIND_VOICE_INTERACTION 必須VoiceInteractionService要求,確保只有系統可以綁定到它
29 BIND_VPN_SERVICE 綁定VPN服務必須通過VpnService服務來請求,只有系統才能用
30 BIND_WALLPAPER 必須通過WallpaperService服務來請求,只有系統才能用
31 BLUETOOTH 允許程序連接配對過的藍牙設備
32 BLUETOOTH_ADMIN 允許程序進行發現和配對新的藍牙設備
33 BLUETOOTH_PRIVILEGED 允許應用程序配對藍牙設備,而無需用戶交互。這不是第三方應用程序可用
34 BODY_SENSORS 允許應用程序訪問用戶使用的傳感器來測量他/她的身體內發生了什麼,如心率儀
35 BROADCAST_PACKAGE_REMOVED 允許程序廣播一個提示消息在一個應用程序包已經移除後
36 BROADCAST_SMS 允許程序當收到短信時觸發一個廣播
37 BROADCAST_STICKY 允許程序收到廣播後快速收到下一個廣播
38 BROADCAST_WAP_PUSH WAP PUSH服務收到後觸發一個廣播
39 CALL_PHONE 允許程序從非系統撥號器裏撥打電話
40 CALL_PRIVILEGED 允許程序撥打電話,替換系統的撥號器界面
41 CAMERA 允許程序訪問攝像頭進行拍照
42 CAPTURE_AUDIO_OUTPUT 允許一個應用程序捕獲音頻輸出。不被第三方應用使用
43 CAPTURE_SECURE_VIDEO_OUTPUT 允許一個應用程序捕獲視頻輸出。不被第三方應用使用
44 CAPTURE_VIDEO_OUTPUT 允許一個應用程序捕獲視頻輸出,不被第三方應用使用
45 CHANGE_COMPONENT_ENABLED_STATE 改變組件是否啓用狀態
46 CHANGE_CONFIGURATION 允許當前應用改變配置,如定位
47 CHANGE_NETWORK_STATE 允許程序改變網絡狀態,如是否聯網
48 CHANGE_WIFI_MULTICAST_STATE 允許程序改變WiFi多播狀態
49 CHANGE_WIFI_STATE 允許程序改變WiFi狀態
50 CLEAR_APP_CACHE 允許程序清除應用緩存
51 CONTROL_LOCATION_UPDATES 允許程序獲得移動網絡定位信息改變
52 DELETE_CACHE_FILES 允許程序刪除緩存文件
53 DELETE_PACKAGES 允許程序刪除應用
54 DIAGNOSTIC 允許程序到RW到診斷資源
55 DISABLE_KEYGUARD 允許程序禁用鍵盤鎖
56 DUMP 允許程序獲取系統dump信息從系統服務
57 EXPAND_STATUS_BAR 允許程序擴展或收縮狀態欄
58 FACTORY_TEST 允許程序運行工廠測試模式
59 FLASHLIGHT 允許訪問閃光燈
60 GET_ACCOUNTS 允許程序訪問賬戶Gmail列表
61 GET_ACCOUNTS_PRIVILEGED 允許訪問帳戶服務中的帳戶列表
62 GET_PACKAGE_SIZE 允許一個程序獲取任何package佔用空間容量
63 GET_TASKS 允許一個程序獲取信息有關當前或最近運行的任務,一個縮略的任務狀態,是否活動等等
64 GLOBAL_SEARCH 允許程序允許全局搜索
65 INSTALL_LOCATION_PROVIDER 允許程序安裝定位提供
66 INSTALL_PACKAGES 允許程序安裝應用
67 INSTALL_SHORTCUT 創建快捷方式
68 INTERNET 允許程序訪問網絡連接,可能產生GPRS流量
69 KILL_BACKGROUND_PROCESSES 允許程序調用killBackgroundProcesses(String).方法結束後臺進程
70 LOCATION_HARDWARE 允許一個應用程序中使用定位功能的硬件,不使用第三方應用
71 MANAGE_DOCUMENTS 允許一個應用程序來管理文檔的訪問,通常是一個文檔選擇器部分
72 MASTER_CLEAR 允許程序執行軟格式化,刪除系統配置信息
73 MEDIA_CONTENT_CONTROL 允許一個應用程序知道什麼是播放和控制其內容。不被第三方應用使用
74 MODIFY_AUDIO_SETTINGS 允許程序修改聲音設置信息
75 MODIFY_PHONE_STATE 允許程序修改電話狀態,如飛行模式,但不包含替換系統撥號器界面
76 MOUNT_FORMAT_FILESYSTEMS 允許程序格式化可移動文件系統,比如格式化清空SD卡
77 MOUNT_UNMOUNT_FILESYSTEMS 允許程序掛載、反掛載外部文件系統
78 NFC 允許程序執行NFC近距離通訊操作,用於移動支持
79 PACKAGE_USAGE_STATS 允許一個程序設置他的activities顯示
80 PERSISTENT_ACTIVITY 允許程序創建一個永久的Activity,該功能標記爲將來將被移除
81 PROCESS_OUTGOING_CALLS 允許程序監視,修改或放棄播出電話
82 READ_CALENDAR 允許程序讀取用戶的日程信息
83 READ_CALL_LOG 讀取通話記錄
84 READ_CONTACTS 允許程序訪問聯繫人通訊錄信息
85 READ_EXTERNAL_STORAGE 程序可以讀取設備外部存儲空間(內置SDcard和外置SDCard)的文件,如果您的App已經添加了”WRITE_EXTERNAL_STORAGE”權限,則就沒必要添加讀的權限了,寫權限已經包含了讀權限了
86 READ_FRAME_BUFFER 允許程序讀取幀緩存用於屏幕截圖
87 READ_INPUT_STATE 允許程序讀取當前鍵的輸入狀態,僅用於系統
88 READ_LOGS 允許程序讀取系統底層日誌
89 READ_PHONE_STATE 允許程序訪問電話狀態
90 READ_SMS 允許程序讀取短信內容
91 READ_SYNC_SETTINGS 允許程序讀取同步設置,讀取Google在線同步設置
92 READ_SYNC_STATS 允許程序讀取同步狀態,獲得Google在線同步狀態
93 READ_VOICEMAIL 允許應用程序在系統讀取語音郵件
94 REBOOT 允許程序重新啓動設備
95 RECEIVE_BOOT_COMPLETED 允許程序開機自動運行
96 RECEIVE_MMS 允許程序接收彩信
97 RECEIVE_SMS 允許程序接收短信
98 RECEIVE_WAP_PUSH 允許程序接收WAP PUSH信息
99 RECORD_AUDIO 允許程序錄制聲音通過手機或耳機的麥克
100 REORDER_TASKS 允許程序重新排序系統Z軸運行中的任務
101 REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 權限的應用程序必須要使用ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS這是一個正常的權限:一個應用程序請求它將永遠被授予權限,而不需要用戶批准或看到它。
102 REQUEST_INSTALL_PACKAGES 允許應用程序請求安裝包。針對API大於22必須持有該許可使用ACTION_INSTALL_PACKAGE應用。
103 RESTART_PACKAGES 允許程序結束任務通過restartPackage(String)方法,該方式將在外來放棄
104 SEND_RESPOND_VIA_MESSAGE 允許用戶在來電的時候用你的應用進行即時的短信息回覆
105 SEND_SMS 允許程序發送短信
106 SET_ALARM 允許程序設置鬧鈴提醒
107 SET_ALWAYS_FINISH 允許程序設置程序在後臺是否總是退出
108 SET_ANIMATION_SCALE 允許程序設置全局動畫縮放
109 SET_DEBUG_APP 允許程序設置調試程序,一般用於開發
110 SET_PREFERRED_APPLICATIONS 允許程序設置應用的參數,已不再工作具體查看addPackageToPreferred(String) 介紹
111 SET_PROCESS_LIMIT 允許程序設置最大的進程數量的限制
112 SET_TIME 允許程序設置系統時間
113 SET_TIME_ZONE 允許程序設置系統時區
114 SET_WALLPAPER 允許程序設置桌面壁紙
115 SET_WALLPAPER_HINTS 允許程序設置壁紙建議
116 SIGNAL_PERSISTENT_PROCESSES 允許程序發送一個永久的進程信號
117 STATUS_BAR 允許程序打開、關閉、禁用狀態欄
118 SYSTEM_ALERT_WINDOW 允許程序顯示系統窗口
119 TRANSMIT_IR 允許使用設備的紅外發射器,如果可用
120 UNINSTALL_SHORTCUT 刪除快捷方式
121 UPDATE_DEVICE_STATS 允許程序更新設備狀態
122 USE_FINGERPRINT 允許應用程序使用指紋硬件
123 USE_SIP 允許程序使用SIP視頻服務
124 VIBRATE 允許程序振動
125 WAKE_LOCK 允許程序在手機屏幕關閉後後臺進程仍然運行
126 WRITE_APN_SETTINGS 允許程序寫入網絡GPRS接入點設置
127 WRITE_CALENDAR 允許程序寫入日程,但不可讀取
128 WRITE_CALL_LOG 允許程序寫入(但是不能讀)用戶的聯繫人數據
129 WRITE_CONTACTS 寫入聯繫人,但不可讀取
130 WRITE_EXTERNAL_STORAGE 允許程序寫入外部存儲,如SD卡上寫文件
131 WRITE_GSERVICES 允許程序修改Google服務地圖
132 WRITE_SECURE_SETTINGS 允許應用程序讀取或寫入安全系統設置
133 WRITE_SETTINGS 允許程序讀取或寫入系統設置
134 WRITE_SYNC_SETTINGS 允許程序寫入同步設置
135 WRITE_VOICEMAIL 允許應用程序修改和刪除系統中的現有的語音郵件,只有系統才能使用

危險權限授權示例

AndroidManifest.xml文件中聲明“撥打電話”的權限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.test">
	
    <uses-permission android:name="android.permission.CALL_PHONE" /> <!-- 打電話 -->
	
	......
	
</manifest>

設置一個打電話的按鈕,點擊之後

call.setOnClickListener((v) -> {
    /*傳入兩個參數,第一個是context,第二個是要獲得的權限名。將返回值與PackageManager.PERMISSION_GRANTED做比較*/
    if (ContextCompat.checkSelfPermission(ContactItemActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
        /*爲獲得授權,調用requestPermissions方法向用戶申請授權,傳入三個參數:context,獲得的權限名字符串,以及請求碼,唯一值即可。*/
        ActivityCompat.requestPermissions(ContactItemActivity.this,new String[]{Manifest.permission.CALL_PHONE}, 1);
    } else {
        //number是要撥打的電話
        call(number);
    }
});

call方法的具體實現

private void call(String number) {
    try {
        System.out.println(number + "---------------------------");
        Intent intent = new Intent(Intent.ACTION_CALL);
        intent.setData(Uri.parse("tel:" + number));
        startActivity(intent);
    } catch (SecurityException e) {
        e.printStackTrace();
    }
}

調用完requestPermissions方法後,無論用戶選擇授權與否,都會回調到onRequestPermissionsResult()方法中,授權結果封裝在grantResults參數中,所以判斷授權結果,只有用戶授權同意,纔會調用call方法。

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case 1:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    call(number);
                } else {
                    Toast.makeText(this, "被拒絕了,沒愛了", Toast.LENGTH_SHORT).show();
                }
                break;
            default:
        }
    }

普通權限授權示例

AndroidManifest.xml文件中聲明“振動”權限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.test">
	
	<!-- 振動權限 -->
    <uses-permission android:name="android.permission.VIBRATE" /> 
	
	......
	
</manifest>

然後直接調用方法使用就行,不需要用戶授權

Button vibrate = findViewById(R.id.vibrate);
vibrate.setOnClickListener((v) -> {
    Vibrator vs = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    vs.vibrate(1000);
});
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章