Android中權(quán)限管理的理解

關(guān)于動(dòng)態(tài)權(quán)限申請的一些理解

什么時(shí)候才會產(chǎn)生動(dòng)態(tài)權(quán)限的申請等

  • targetSdkVersion >= 23 ;手機(jī)是安卓6.0及以上前域;這兩個(gè)條件缺一不可池充;
    如果targetSdkVersion < 23 捷枯,無論手機(jī)版本是6.0還是6.0以下崇败,都不會有動(dòng)態(tài)權(quán)限申請這回事晓锻,依然使用舊的權(quán)限系統(tǒng)歌焦;
    如果targetSdkVersion >= 23, 但是手機(jī)是6.0以下的系統(tǒng)砚哆,仍然不會有動(dòng)態(tài)權(quán)限申請這回事独撇,依然使用舊的權(quán)限系統(tǒng);
    只有在targetSdkVersion >= 23躁锁,手機(jī)系統(tǒng)是6.0及以上纷铣,才需要進(jìn)行動(dòng)態(tài)權(quán)限的處理。

  • 但是灿里,假如targetSdkVersion < 23关炼,但是用戶手機(jī)是6.0及以上,手動(dòng)關(guān)閉了應(yīng)用的某個(gè)權(quán)限匣吊,用戶取消授權(quán)時(shí),android 6.0系統(tǒng)會警告寸潦,但用戶可以無視這種警告而取消授權(quán)色鸳。這個(gè)時(shí)候,系統(tǒng)本身不拋出異常见转,他將啥都不干命雀,結(jié)果導(dǎo)致函數(shù)返回值是null或者0。盡管app不會在調(diào)用這個(gè)函數(shù)時(shí)崩潰斩箫,但是返回值null或者0可能接下來依然導(dǎo)致崩潰吏砂。

  • 上述只是針對原生系統(tǒng)的,國內(nèi)廠商即使是4.4或者5.1等等6.0以下的系統(tǒng)版本中乘客,基本都會有權(quán)限管理狐血,很多第三方應(yīng)用360,LBE等等也會有權(quán)限管理易核,他們的實(shí)現(xiàn)原理我不清楚匈织,因此我覺得最好在應(yīng)用中實(shí)現(xiàn)權(quán)限檢測、申請這類的工作牡直,防止應(yīng)用各種意外缀匕。

  • 項(xiàng)目中,targetSdkVersion 是22碰逸,我的做法是乡小,在使用危險(xiǎn)權(quán)限之前,檢測應(yīng)用有沒有被授權(quán)(雖然按道理來講饵史,安裝的時(shí)候都被授權(quán)了满钟,但可能被用戶手動(dòng)關(guān)閉了)胜榔,如果有,就正常調(diào)用零远,如果沒有苗分,就彈出Dialog提示用戶沒有被授權(quán)該權(quán)限,請開啟后重試牵辣。具體怎么開啟摔癣,交給用戶自己去做,在這里只是提示而已纬向。也就是說择浊,在項(xiàng)目中,并沒有做targetSdkVersion >= 23的真正意義的動(dòng)態(tài)權(quán)限管理逾条。

權(quán)限分類

以下是危險(xiǎn)權(quán)限琢岩,必須動(dòng)態(tài)管理的(其他未列出的權(quán)限時(shí)屬于正常權(quán)限,用戶無法取消授權(quán))

group:android.permission-group.CONTACTS
  permission:android.permission.WRITE_CONTACTS
  permission:android.permission.GET_ACCOUNTS
  permission:android.permission.READ_CONTACTS

group:android.permission-group.PHONE
  permission:android.permission.READ_CALL_LOG
  permission:android.permission.READ_PHONE_STATE
  permission:android.permission.CALL_PHONE
  permission:android.permission.WRITE_CALL_LOG
  permission:android.permission.USE_SIP
  permission:android.permission.PROCESS_OUTGOING_CALLS
  permission:com.android.voicemail.permission.ADD_VOICEMAIL

group:android.permission-group.CALENDAR
  permission:android.permission.READ_CALENDAR
  permission:android.permission.WRITE_CALENDAR

group:android.permission-group.CAMERA
  permission:android.permission.CAMERA

group:android.permission-group.SENSORS
  permission:android.permission.BODY_SENSORS

group:android.permission-group.LOCATION
  permission:android.permission.ACCESS_FINE_LOCATION
  permission:android.permission.ACCESS_COARSE_LOCATION

group:android.permission-group.STORAGE
  permission:android.permission.READ_EXTERNAL_STORAGE
  permission:android.permission.WRITE_EXTERNAL_STORAGE

group:android.permission-group.MICROPHONE
  permission:android.permission.RECORD_AUDIO

group:android.permission-group.SMS
  permission:android.permission.READ_SMS
  permission:android.permission.RECEIVE_WAP_PUSH
  permission:android.permission.RECEIVE_MMS
  permission:android.permission.RECEIVE_SMS
  permission:android.permission.SEND_SMS
  permission:android.permission.READ_CELL_BROADCASTS

同一個(gè)Group中师脂,只要有一個(gè)Permission被授權(quán)担孔,就認(rèn)為該Group內(nèi)的其他Permission也被授權(quán)。

Fragment申請權(quán)限的時(shí)候

如果使用ActivityCompat.requestPermissions吃警,不會調(diào)用onRequestPermissionsResult()
應(yīng)該直接requestPermissions糕篇,沒有前面的ActivityCompat
請求權(quán)限
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},
                MY_PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION);

在targetSdkVersion < = 22的時(shí)候

  • 判斷用戶是否有某個(gè)權(quán)限,要使用API:

PermissionChecker.checkSelfPermission(getActivity(), Manifest.permission.CAMERA)

  • 由于某種原因酌心,項(xiàng)目的targetSdkVersion 最高只能設(shè)置到22拌消,但是需要在調(diào)用系統(tǒng)相機(jī)的時(shí)候檢測權(quán)限,原本是使用如下的權(quán)限工具類來檢測是否有權(quán)限的:
    import android.content.Context;
    import android.content.pm.PackageManager;
    import android.support.v4.content.ContextCompat;

    public class PermissionUtil {
        private final Context mContext;

        public PermissionUtil(Context context) {
            mContext = context.getApplicationContext();
        }
        // 判斷權(quán)限集合
        public boolean lacksPermissions(String... permissions) {
            for (String permission : permissions) {
                if (lacksPermission(permission)) {
                    return true;
                }
            }
            return false;
        }
     
        // 判斷是否缺少權(quán)限,缺少返回true:只有targetSDKversion >=23 的時(shí)候有效
        public boolean lacksPermission(String permission) {
            return ContextCompat.checkSelfPermission(mContext, permission) ==
                    PackageManager.PERMISSION_DENIED;
        }
     
    }

但是這種方式檢測ContextCompat.checkSelfPermission無論開啟和關(guān)閉權(quán)限安券,檢測出來都是同一個(gè)結(jié)果墩崩,因?yàn)檫@種檢測方式只適用于targetSdkVersion >= 23的情況。

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末侯勉,一起剝皮案震驚了整個(gè)濱河市鹦筹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌壳鹤,老刑警劉巖盛龄,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異芳誓,居然都是意外死亡余舶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門锹淌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來匿值,“玉大人,你說我怎么就攤上這事赂摆⌒荆” “怎么了钟些?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長绊谭。 經(jīng)常有香客問我政恍,道長,這世上最難降的妖魔是什么达传? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任篙耗,我火速辦了婚禮,結(jié)果婚禮上宪赶,老公的妹妹穿的比我還像新娘宗弯。我一直安慰自己,他們只是感情好搂妻,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布蒙保。 她就那樣靜靜地躺著,像睡著了一般欲主。 火紅的嫁衣襯著肌膚如雪邓厕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天扁瓢,我揣著相機(jī)與錄音邑狸,去河邊找鬼。 笑死涤妒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的赚哗。 我是一名探鬼主播她紫,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼屿储!你這毒婦竟也來了贿讹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤够掠,失蹤者是張志新(化名)和其女友劉穎民褂,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疯潭,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赊堪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了竖哩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哭廉。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖相叁,靈堂內(nèi)的尸體忽然破棺而出遵绰,到底是詐尸還是另有隱情辽幌,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布椿访,位于F島的核電站乌企,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏成玫。R本人自食惡果不足惜加酵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望梁剔。 院中可真熱鬧虽画,春花似錦、人聲如沸荣病。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽个盆。三九已至脖岛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間颊亮,已是汗流浹背柴梆。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留终惑,地道東北人绍在。 一個(gè)月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像雹有,于是被迫代替她去往敵國和親偿渡。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容