android6.0:動態(tài)權(quán)限申請

前言

Android 6.0 雖然相對于上一個(gè)版本 更新幅度較小,但也帶來了一寫全新的特性,這里就主要談一談 android 6.0--權(quán)限管理,開發(fā)過程中,就需要開發(fā)者去動態(tài)的權(quán)限申請妙蔗。

動態(tài)權(quán)限申請

Google從一開始就把權(quán)限分為兩類,一種是不涉及用戶隱私的權(quán)限:Normal Permission (普通權(quán)限)疆瑰,不需要用戶去主動授權(quán)眉反,在AndroidManifest.xml文件中聲明即可昙啄,另一種就是需要用戶授權(quán)才能使用的權(quán)限:Dangerous Permission(高危權(quán)限),同樣需要在AndroidManifest.xml中聲明寸五。

何時(shí)需要?jiǎng)討B(tài)權(quán)限申請

targetSdkVersion >=23 梳凛,只有當(dāng)我們把targetSdkVersion設(shè)置為大于等于23的時(shí)候,才會需要主動的申請權(quán)限播歼,如果不想啟用該方式伶跷,只要把targetSdkVersion 設(shè)置為 22或更小版本即可。

有哪些權(quán)限需要?jiǎng)討B(tài)申請
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

以上就是需要主動申請的權(quán)限了也是前面提到的 Dangerous Permission(高危權(quán)限)秘狞,可以發(fā)現(xiàn)以上權(quán)限是一組一組出現(xiàn)的叭莫,android提供了這樣的分組,當(dāng)該組中任意一個(gè)權(quán)限授權(quán)成功烁试,默認(rèn)整組權(quán)限獲得授權(quán)雇初。當(dāng)然,在開發(fā)過程中减响,最好還是只對用到的權(quán)限做申請靖诗,畢竟后面的版本權(quán)限組也是會發(fā)生改變的。

申請流程

谷歌提供的官方demo
https://github.com/googlesamples/android-RuntimePermissions

這里我總結(jié)了一下流程:
  1. 在AndroidManifest文件中添加需要的權(quán)限支示。這個(gè)步驟和我們之前的開發(fā)并沒有什么變化刊橘,試圖去申請一個(gè)沒有聲明的權(quán)限可能會導(dǎo)致程序崩潰。

  2. 檢查權(quán)限是否已授權(quán)颂鸿,如果已經(jīng)授權(quán)促绵,則直接進(jìn)行想要的操作即可。

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
                != PackageManager.PERMISSION_GRANTED) {
        //未授權(quán)嘴纺,提起權(quán)限申請
        } else {
        //權(quán)限已授權(quán)败晴,功能操作
        }

這里用到了一個(gè)方法,ActivityCompat.checkSelfPermission栽渴,用于判斷app是否已經(jīng)對某個(gè)權(quán)限授權(quán)尖坤,該方法只有兩個(gè)返回值

PackageManager.PERMISSION_DENIED //表示尚未授權(quán)
PackageManager.PERMISSION_GRANTED //表示已授權(quán)
  1. 如果尚未授權(quán),這里根據(jù)demo的流程 用到了
    ActivityCompat.shouldShowRequestPermissionRationale 方法檢查闲擦,用戶是否曾經(jīng)拒絕過授權(quán)慢味,如果拒絕過,則開發(fā)者可以自定義內(nèi)容去提醒用戶該權(quán)限的用途墅冷,引導(dǎo)用戶授權(quán)纯路。
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.CAMERA)) {
          //用于開發(fā)者提示用戶權(quán)限的用途
        } else {
        //申請權(quán)限
        }
  1. 如果是首次,則發(fā)起申請俺榆。
 ActivityCompat.requestPermissions(MainActivity.this,
                                    new String[]{Manifest.permission.CAMERA},
                                    REQUEST_CAMERA);

ActivityCompat.requestPermissions,權(quán)限申請装哆,這里出入的權(quán)限是一個(gè)數(shù)組集合罐脊,可以同時(shí)申請多個(gè)權(quán)限定嗓。

  1. 權(quán)限申請的回調(diào)處理。
    首先需要實(shí)現(xiàn)接口ActivityCompat.OnRequestPermissionsResultCallback萍桌,注意一點(diǎn)宵溅,該接口必須由 Activity 或者其子類來實(shí)現(xiàn),如果該實(shí)現(xiàn)類是FragmentActivity 的子類則不需要再去實(shí)現(xiàn)上炎,因?yàn)镕ragmentActivity已經(jīng)實(shí)現(xiàn)了該接口恃逻,接下來重寫回調(diào)方法onRequestPermissionsResult。
@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
            @NonNull int[] grantResults) {
        //判斷請求碼藕施,確定當(dāng)前申請的權(quán)限
        if (requestCode == REQUEST_CAMERA) {
            //判斷權(quán)限是否申請通過
            if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                //授權(quán)成功
            } else {
                //授權(quán)失敗
            }
        } else {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }

回調(diào)方法的返回結(jié)果:

  • requestCode :請求碼寇损,在提交申請權(quán)限時(shí),傳入的請求碼一致裳食。
  • permissions:申請的權(quán)限數(shù)組矛市。
  • grantResults:權(quán)限申請結(jié)果,與permissions 一一對用诲祸,表示各個(gè)權(quán)限的授權(quán)情況浊吏。

總結(jié)

關(guān)于android 6.0 的權(quán)限動態(tài)申請,雖然對于開發(fā)者來說救氯,比較麻煩找田,但從用戶角度來看,還是相當(dāng)好的着憨。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末墩衙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子享扔,更是在濱河造成了極大的恐慌底桂,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惧眠,死亡現(xiàn)場離奇詭異籽懦,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)氛魁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進(jìn)店門暮顺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人秀存,你說我怎么就攤上這事捶码。” “怎么了或链?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵惫恼,是天一觀的道長。 經(jīng)常有香客問我澳盐,道長祈纯,這世上最難降的妖魔是什么令宿? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮腕窥,結(jié)果婚禮上粒没,老公的妹妹穿的比我還像新娘。我一直安慰自己簇爆,他們只是感情好癞松,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著入蛆,像睡著了一般响蓉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上安寺,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天厕妖,我揣著相機(jī)與錄音,去河邊找鬼挑庶。 笑死言秸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的迎捺。 我是一名探鬼主播举畸,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼凳枝!你這毒婦竟也來了抄沮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤岖瑰,失蹤者是張志新(化名)和其女友劉穎叛买,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蹋订,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡率挣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了露戒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片椒功。...
    茶點(diǎn)故事閱讀 40,872評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖智什,靈堂內(nèi)的尸體忽然破棺而出动漾,到底是詐尸還是另有隱情,我是刑警寧澤荠锭,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布旱眯,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏删豺。R本人自食惡果不足惜础爬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吼鳞。 院中可真熱鬧,春花似錦叫搁、人聲如沸赔桌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疾党。三九已至,卻和暖如春惨奕,著一層夾襖步出監(jiān)牢的瞬間雪位,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工梨撞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留雹洗,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓卧波,卻偏偏與公主長得像时肿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子港粱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評論 2 361

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