android 手動封裝動態(tài)運行權(quán)限

android 6.0以后增加一個重要的適配察滑,動態(tài)運行權(quán)限打厘,之前我都是采用一些第三方庫:PermissionsDispatcher;沒啥大問題就是覺得膈應贺辰,閑了還是自己動手封裝一下:

總體實現(xiàn)過程:

1户盯,BaseActivity中加入權(quán)限判斷以及申請。

2饲化,需要權(quán)限的activity重寫B(tài)aseActivity中onCall()方法來獲得權(quán)限成功后要做的事情莽鸭。

下面開始具體的實現(xiàn)的過程:

比如說我們先要獲得相機這個權(quán)限:

1,清單文件中先申明吃靠。

image

2硫眨,調(diào)用BaseActivity中的setPermission(String permission),方法,

3巢块,重寫B(tài)aseActivity的onCall(String permission)的方法礁阁。

image

那么BaseActivity 中是如何封裝的呢巧号?

image

申請權(quán)限的回調(diào)

  @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == 0 || requestCode == 1){//requestCode = 0 表示申請單個重要權(quán)限  = 1 為同時申請多個權(quán)限 一般來說不太重要
            for (int i = 0; i < grantResults.length; i++) {
                if (grantResults[i] == -1){
                    if (shouldShowRequestPermissionRationale(permissions[i])) {
                        /**
                         * 用戶拒絕后的操作,這里我們繼續(xù)提醒用戶申請權(quán)限(除非是特別特別重要的權(quán)限姥闭,否則不要這樣做5ず琛)
                         */
                        if (requestCode == 0){
                            ActivityCompat.requestPermissions(this,new String[]{permissions[i]},0);
                        }else{
                            Toast.makeText(BaseActivity.this, "權(quán)限被拒絕: "+permissions[i], Toast.LENGTH_SHORT).show();
                        }

                    }else{
                        if (requestCode == 0){
                            /**
                             * 用戶多次拒絕權(quán)限并設置了不再提醒,那么只能提醒用戶去設置頁面打開我們的權(quán)限了(除非是特別特別重要的權(quán)限棚品,否則不要這樣做2犯摺)
                             */
                            final AlertDialog.Builder builder = new AlertDialog.Builder(this);
                            builder.setTitle("說明");
                            builder.setMessage("沒有權(quán)限將無法使用APP,打開設置頁面放開權(quán)限");
                            builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    /**
                                     * 這里使用了第三方庫,用于打開應用的權(quán)限設置頁面(有各種手機廠商的適配)
                                     *  author : Senh Linsh
                                     *  github : https://github.com/SenhLinsh
                                     */
                                    Utils.init(BaseActivity.this);
                                    IntentUtils.gotoPermissionSetting();
//                            Intent intent = new Intent();
//                            intent.setAction(Settings.ACTION_SETTINGS);
//                            startActivity(intent);
                                }
                            });
                            builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    Toast.makeText(BaseActivity.this, "無法使用APP", Toast.LENGTH_SHORT).show();
                                }
                            });
                            builder.show();
                        }else{
                            Toast.makeText(BaseActivity.this, "權(quán)限被拒絕: "+permissions[i], Toast.LENGTH_SHORT).show();
                        }
                    }
                }else if(requestCode == 0){
                    onCall(permissions[i]);
                }
            }

            if (requestCode == 1){
                onCall("");
            }
        }
        else{
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }

    }

這樣就算是簡單的封裝完成啦~當然這里還有多權(quán)限申請的方法:

 /**
     * 檢查多個申請權(quán)限
     * @param permissionsArray
     */
    public void setPermissionGroup(String[] permissionsArray){

        permissionsList = new ArrayList<String>();
        if (Build.VERSION.SDK_INT>23){

            for (String permission : permissionsArray) {
                if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
                    permissionsList.add(permission);
                }
            }

           if (permissionsList.size() == 0){
               onCall("");
           }else{
               ActivityCompat.requestPermissions(this, permissionsList.toArray(new String[permissionsList.size()]), 1);
           }


        }else{
            onCall("");
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末南片,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子庭敦,更是在濱河造成了極大的恐慌疼进,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秧廉,死亡現(xiàn)場離奇詭異伞广,居然都是意外死亡,警方通過查閱死者的電腦和手機疼电,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門嚼锄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蔽豺,你說我怎么就攤上這事区丑。” “怎么了修陡?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵沧侥,是天一觀的道長。 經(jīng)常有香客問我魄鸦,道長宴杀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任拾因,我火速辦了婚禮旺罢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绢记。我一直安慰自己扁达,他們只是感情好,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布庭惜。 她就那樣靜靜地躺著罩驻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪护赊。 梳的紋絲不亂的頭發(fā)上惠遏,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天砾跃,我揣著相機與錄音,去河邊找鬼节吮。 笑死抽高,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的透绩。 我是一名探鬼主播翘骂,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼帚豪!你這毒婦竟也來了碳竟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤狸臣,失蹤者是張志新(化名)和其女友劉穎莹桅,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烛亦,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡诈泼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了煤禽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铐达。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖檬果,靈堂內(nèi)的尸體忽然破棺而出瓮孙,到底是詐尸還是另有隱情,我是刑警寧澤选脊,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布衷畦,位于F島的核電站,受9級特大地震影響知牌,放射性物質(zhì)發(fā)生泄漏祈争。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一角寸、第九天 我趴在偏房一處隱蔽的房頂上張望菩混。 院中可真熱鬧,春花似錦扁藕、人聲如沸沮峡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽邢疙。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疟游,已是汗流浹背呼畸。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留颁虐,地道東北人蛮原。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像另绩,于是被迫代替她去往敵國和親儒陨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355