1. 程式人生 > >Android6.0的執行時許可權

Android6.0的執行時許可權

聊一聊Android 6.0的執行時許可權

Android 6.0,代號棉花糖,自發布伊始,其主要的特徵執行時許可權就很受關注。因為這一特徵不僅改善了使用者對於應用的使用體驗,還使得應用開發者在實踐開發中需要做出改變。

沒有深入瞭解執行時許可權的開發者通常會有很多疑問,比如什麼是執行時許可權,哪些是執行時的許可權,我的應用是不是會在6.0系統上各種崩潰呢,如何才能支援執行時許可權機制呢。本文講嘗試回答這一些問題,希望讀者閱讀完成之後,都能找到較為完美的答案。

許可權一刀切

在6.0以前的系統,都是許可權一刀切的處理方式,只要使用者安裝,Manifest申請的許可權都會被賦予,並且安裝後許可權也撤銷不了


這種情況下,當我們從Google Play安裝一個應用,在安裝之前會得到這樣的許可權提示資訊。

Permission

當上述對話方塊彈出後,使用者只有兩種選擇:

  • 我信任你,即使有敏感許可權
  • 你一個**應用,要這個許可權幹嘛,我還是不安裝了。

所以,這種一刀切的處理方式還是有弊端的,我們沒有辦法只允許某些許可權或者拒絕某些許可權。

棉花糖執行時許可權

從棉花糖開始,Android系統引入了新的許可權機制,即本文要講的執行時許可權。

何為執行時許可權呢?舉個栗子,以某個需要拍照的應用為例,當執行時許可權生效時,其Camera許可權不是在安裝後賦予,而是在應用執行的時候進行請求許可權(比如當用戶按下”相機拍照“按鈕後)看到的效果則是這樣的

Requesting Camera Permission

接下來,對於Camera許可權的處理完全權交給使用者。是不是有點像蘋果系統的處理呢,不要說這是抄襲,暫且稱為師夷長技以制夷。

許可權的分組

Android中有很多許可權,但並非所有的許可權都是敏感許可權,於是6.0系統就對許可權進行了分類,一般為下述幾類

  • 正常(Normal Protection)許可權
  • 危險(Dangerous)許可權
  • 特殊(Particular)許可權
  • 其他許可權(一般很少用到)

正常許可權

正常許可權具有如下的幾個特點

  • 對使用者隱私沒有較大影響或者不會打來安全問題。
  • 安裝後就賦予這些許可權,不需要顯示提醒使用者,使用者也不能取消這些許可權

正常許可權列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
ACCESS_LOCATION_EXTRA_COMMANDS
ACCESS_NETWORK_STATE
ACCESS_NOTIFICATION_POLICY
ACCESS_WIFI_STATE
BLUETOOTH
BLUETOOTH_ADMIN
BROADCAST_STICKY
CHANGE_NETWORK_STATE
CHANGE_WIFI_MULTICAST_STATE
CHANGE_WIFI_STATE
DISABLE_KEYGUARD
EXPAND_STATUS_BAR
GET_PACKAGE_SIZE
INTERNET
KILL_BACKGROUND_PROCESSES
MODIFY_AUDIO_SETTINGS
NFC
READ_SYNC_SETTINGS
READ_SYNC_STATS
RECEIVE_BOOT_COMPLETED
REORDER_TASKS
REQUEST_INSTALL_PACKAGES
SET_TIME_ZONE
SET_WALLPAPER
SET_WALLPAPER_HINTS
TRANSMIT_IR
USE_FINGERPRINT
VIBRATE
WAKE_LOCK
WRITE_SYNC_SETTINGS
SET_ALARM
INSTALL_SHORTCUT
UNINSTALL_SHORTCUT

上述的許可權基本設計的是關於網路,藍芽,時區,快捷方式等方面,只要在Manifest指定了這些許可權,就會被授予,並且不能撤銷。

特殊許可權

這裡講特殊許可權提前講一下,因為這個相對來說簡單一些。

特殊許可權,顧名思義,就是一些特別敏感的許可權,在Android系統中,主要由兩個

  • SYSTEM_ALERT_WINDOW,設定懸浮窗,進行一些黑科技
  • WRITE_SETTINGS 修改系統設定

關於上面兩個特殊許可權的授權,做法是使用startActivityForResult啟動授權介面來完成。

請求SYSTEM_ALERT_WINDOW

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private static final int REQUEST_CODE = 1;
private  void requestAlertWindowPermission() {
    Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
    intent.setData(Uri.parse("package:" + getPackageName()));
    startActivityForResult(intent, REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE) {
        if (Settings.canDrawOverlays(this)) {
          Log.i(LOGTAG, "onActivityResult granted");
        }
    }
}

上述程式碼需要注意的是

  • 使用Action 
Android6.0執行許可權處理(專案中使用到的一種形式,沒有使用第三方庫)

相信大家都知道Android6.0之後的許可權申請跟之前的版本有一個很大的差別,那就是任何危險許可權都必須經過使用者的手動選擇是否接受來做相應的操作,而Android6.0之前安裝應用的過程中是預設選

Android 6.0執行許可權勾選不再詢問後該如何處理?

Android 6.0執行時許可權勾選不再詢問後該如何處理? 當第一次請求許可權申請被拒絕後再進行第二次申請時,對話方塊中會多出一個 不再詢問 的複選框。如果勾選了該複選框並且拒絕請求,那麼以後將無法再申請該許可權。也就是說在呼叫 requestPermissions() 後,onRequest

Android 6 0 執行許可權處理

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android 6 0 執行許可權處理完全解析

                     一、概述ok,本篇文章目的之一就是對執行時許可權處理的一個介紹,以及對目前許可權相關的庫的一些瞭解。當然非常推薦閱讀官網許可權相關文章:本文也是在上述文章基礎上理解、實驗以及封裝。二、執行時許可權的變化及特點對於6.0以下的許可權及在安裝的時候,根據許可權宣告產生一個

以呼叫系統相機拍照為例瞭解Android 6.0執行許可權

首先扯點別的,聽說這個週末是好天氣,想約她一起去公園賞賞梅花,只有我自己估計她也不一定去啊,哈哈。 在android6.0及以上系統,Android在安裝一個應用的時候不再需要列出一大堆許可權,讓使用者點選同意以後才可以安裝。Instead, 當應用在執行的時

談談Android 6.0執行許可權理解

前言  谷歌在2015年8月份時候,釋出了Android 6.0版本,代號叫做“棉花糖”(Marshmallow ),其中的很大的一部分變化,是在使用者許可權授權上,或許是感覺之前預設授權的不合理,現在6.0出來,使得使用者許可權授權變得合理。這可能也是參考IOS系統的,只有在使用者需要使用許可權的時候,才

Android 6.0執行許可權申請和一些坑

1.概述 大家知道在Android6.0(Api23)之前,使用者許可權的申請都是在AndroidManifest.xml 宣告的,而在6.0之後,對某些涉及到使用者隱私的許可權可在執行時根據使用者的需要動態授予。如果你的應用設定targetSdkVersio

Android 6.0 執行許可權處理

執行時許可權介紹 Android 6.0在我們原有的AndroidManifest.xml宣告許可權的基礎上, 又新增了執行時許可權動態檢測,以下許可權都需要在執行時判斷: 執行時許可權處理 Android6.0系統預設為targetSdkVersion小於23的應用預設授予了所申請的所有許可權,

Android 6.0 執行許可權管理最佳實踐

這是一篇遲來的部落格,Android M已經發布一年多了(6.0的變化),在Android M中許可權系統被重新設計,發生了顛覆性的變化,很多人把握不好這個變化,一是對這個許可權策略和套路還沒有摸透,二是沒有一個很好的實踐來支撐,在我的技術開發群裡很多人問我

6.0執行許可權與targetSdkVersion選擇

targetSDKVersion 簡單來說就代表著你的App能夠適配的系統版本,意味著你的App在這個版本的手機上做了充分的 前向 相容性處理和實際測試。其實我們寫程式碼時都是經常幹這麼一件事,就是 if(Build.VERSION.SDK_INT >= 23) {

android 6.0執行許可權應用之相簿圖片選取

public class MainActivity extends AppCompatActivity { public static final int REQUEST_CODE=200; public static final int REQUEST_C