2019-02-20動(dòng)態(tài)請(qǐng)求權(quán)限,請(qǐng)求失敗跳轉(zhuǎn)至設(shè)置頁(yè)面

附上我參考的大神鏈接https://blog.csdn.net/wenzhi20102321/article/details/80487975

申請(qǐng)三個(gè)權(quán)限渠羞,錄音和文件讀寫(xiě)是附加的契吉,最重要的是撥打電話權(quán)限

    //1漠其、首先將需要的權(quán)限寫(xiě)到manifest.xml
    <uses-permission android:name="android.permission.CALL_PHONE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>


activity.java

public class MainActivity extends AppCompatActivity {
        Context mContext;
        private TextView bohao;
        //申請(qǐng)三個(gè)權(quán)限贫悄,錄音和文件讀寫(xiě)是附加的,最重要的是撥打電話權(quán)限
        //1娘摔、首先聲明一個(gè)數(shù)組permissions窄坦,將需要的權(quán)限都放在里面
        String[] permissions = new String[]{Manifest.permission.RECORD_AUDIO,
                Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.CALL_PHONE};

        //2、創(chuàng)建一個(gè)mPermissionList凳寺,逐個(gè)判斷哪些權(quán)限未授予鸭津,未授予的權(quán)限存儲(chǔ)到mPerrrmissionList中
        List<String> mPermissionList = new ArrayList<>();
        private final int mRequestCode = 100;//權(quán)限請(qǐng)求碼
        public  final int REQUEST_CALL_PERMISSION = 10111; //撥號(hào)請(qǐng)求碼



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bohao = findViewById(R.id.bohao);
        bohao.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String mobile = "123456";
                String phone;
              
                //這里我直接在頁(yè)面創(chuàng)建的時(shí)候請(qǐng)求權(quán)限,其實(shí)不太好肠缨,這里只是為了演示
                //一般是在觸發(fā)某個(gè)事件的時(shí)候再請(qǐng)求動(dòng)態(tài)權(quán)限逆趋,比如點(diǎn)擊按鈕跳轉(zhuǎn)到一個(gè)拍照頁(yè)面,如果權(quán)限通過(guò)就跳轉(zhuǎn)晒奕,否者吐司說(shuō)沒(méi)有權(quán)限闻书!
                if (Build.VERSION.SDK_INT >= 23) {//6.0才用動(dòng)態(tài)權(quán)限
                    initPermission();
                }

            }
        });
    


    }
      
        //權(quán)限判斷和申請(qǐng)
    private void initPermission() {
        mPermissionList.clear();//清空沒(méi)有通過(guò)的權(quán)限

        //逐個(gè)判斷你要的權(quán)限是否已經(jīng)通過(guò)
        for (int i = 0; i < permissions.length; i++) {
            if (ContextCompat.checkSelfPermission(this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {
                mPermissionList.add(permissions[i]);//添加還未授予的權(quán)限
            }
        }

        //申請(qǐng)權(quán)限
        if (mPermissionList.size() > 0) {//有權(quán)限沒(méi)有通過(guò),需要申請(qǐng)
            ActivityCompat.requestPermissions(this, permissions, mRequestCode);
        }else{
            //說(shuō)明權(quán)限都已經(jīng)通過(guò)脑慧,可以做你想做的事情去,例如撥打電話123
            call("tel:"+"123");
        }
    }
    /**
     * 檢查權(quán)限后的回調(diào)
     * @param requestCode 請(qǐng)求碼
     * @param permissions  權(quán)限
     * @param grantResults 結(jié)果
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                           @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        boolean hasPermissionDismiss = false;//有權(quán)限沒(méi)有通過(guò)
        if (mRequestCode == requestCode) {
            for (int i = 0; i < grantResults.length; i++) {
                if (grantResults[i] == -1) {
                    hasPermissionDismiss = true;
                }
            }
            //如果有權(quán)限沒(méi)有被允許
            if (hasPermissionDismiss) {
                showPermissionDialog();//跳轉(zhuǎn)到系統(tǒng)設(shè)置權(quán)限頁(yè)面魄眉,或者直接關(guān)閉頁(yè)面,不讓他繼續(xù)訪問(wèn)
            }else{
                //全部權(quán)限通過(guò)闷袒,可以進(jìn)行下一步操作坑律。。囊骤。

            }
        }

    }
    /**
     * 不再提示權(quán)限時(shí)的展示對(duì)話框
     */
    AlertDialog mPermissionDialog;
    String mPackName = "com.huawei.liwenzhi.weixinasr";

    private void showPermissionDialog() {
        if (mPermissionDialog == mPermissionDialog ) {
            mPermissionDialog = new AlertDialog.Builder(this)
                    .setMessage("已禁用權(quán)限晃择,請(qǐng)手動(dòng)授予")
                    .setPositiveButton("設(shè)置", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            goIntentSetting();//跳轉(zhuǎn)到設(shè)置
                        }
                    })
                    .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            //關(guān)閉頁(yè)面或者做其他操作
                            cancelPermissionDialog();

                        }
                    })
                    .create();
        }
        mPermissionDialog.show();
    }
    //跳轉(zhuǎn)到設(shè)置頁(yè)面
    private void goIntentSetting() {
        Uri packageURI = Uri.parse("package:" + "com.example.administrator.hello");
        Intent intent =  new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS,packageURI);
        startActivity(intent);
        try {
            mContext.startActivity(intent);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //關(guān)閉對(duì)話框
    private void cancelPermissionDialog() {
        mPermissionDialog.cancel();
    }
    /**
     * 撥打電話(直接撥打)
     * @param telPhone 電話
     */
    public void call(String telPhone){

            Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse(telPhone));
            startActivity(intent);

    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末冀值,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子宫屠,更是在濱河造成了極大的恐慌列疗,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件激况,死亡現(xiàn)場(chǎng)離奇詭異作彤,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)乌逐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門竭讳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人浙踢,你說(shuō)我怎么就攤上這事绢慢。” “怎么了洛波?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵胰舆,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我蹬挤,道長(zhǎng)缚窿,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任焰扳,我火速辦了婚禮倦零,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吨悍。我一直安慰自己扫茅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布育瓜。 她就那樣靜靜地躺著葫隙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪躏仇。 梳的紋絲不亂的頭發(fā)上恋脚,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音钙态,去河邊找鬼慧起。 笑死,一個(gè)胖子當(dāng)著我的面吹牛册倒,可吹牛的內(nèi)容都是我干的蚓挤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼灿意!你這毒婦竟也來(lái)了估灿?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤缤剧,失蹤者是張志新(化名)和其女友劉穎馅袁,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體荒辕,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡汗销,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了抵窒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弛针。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖李皇,靈堂內(nèi)的尸體忽然破棺而出削茁,到底是詐尸還是另有隱情,我是刑警寧澤掉房,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布茧跋,位于F島的核電站,受9級(jí)特大地震影響卓囚,放射性物質(zhì)發(fā)生泄漏瘾杭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一哪亿、第九天 我趴在偏房一處隱蔽的房頂上張望富寿。 院中可真熱鬧,春花似錦锣夹、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至恤左,卻和暖如春贴唇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背飞袋。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工戳气, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人巧鸭。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓瓶您,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子呀袱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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