????????今天是2018年11月22號(hào)今天似乎不是那么的忙岛啸。
? ? ? ? 雖然工資很低但是我還是要努力的去工作下去秦驯,畢竟在這個(gè)人吃人的社會(huì)中我們無法去隨心所欲的生活瞄桨,在這個(gè)現(xiàn)實(shí)的社會(huì)中我們還是努力去賺錢蠢莺,努力的去養(yǎng)活自己吧偎窘。
? ? ? ? 人生沒有那么多的知己所以坷牛,有時(shí)候還是要去找個(gè)地方傾瀉一下自己的負(fù)面情緒罕偎,不然在這個(gè)大時(shí)代的快節(jié)奏的趨勢下總有一天你會(huì)撐不下去的。
? ? ? ? 好吧言歸正傳吧今天我們說一下權(quán)限吧京闰,其實(shí)剛開始我還是有點(diǎn)不明白颜及,有興趣的童鞋我們可以一起去看看呀。
? ? ? ? 權(quán)限是在22還是23之后才會(huì)出現(xiàn)的蹂楣,所以一般寫的時(shí)候我們需要去判斷你的SDK是不是23以后的版本俏站,這時(shí)我們才需要去判斷你的權(quán)限是否是通過的。
? ? ? ?來說一下今天我糾結(jié)的地方那就是為什么我的權(quán)限獲取判斷了捐迫,還不彈出我需要的那個(gè)系統(tǒng)獲取權(quán)限的對(duì)話框乾翔,這到底是為什么,在國產(chǎn)機(jī)中我們國家的各大廠家都比較的優(yōu)秀,就是在安裝app的時(shí)候會(huì)將我們?cè)谇鍐挝募袑懙臋?quán)限全部都獲取以邊所以導(dǎo)致了我為什么看不到我想看到的那個(gè)系統(tǒng)獲取權(quán)限的對(duì)話框反浓,后來經(jīng)過群里的好心人糾正終于發(fā)現(xiàn)了這個(gè)問題萌丈,于是我就用虛擬機(jī)嘗試了一次中與看到了我想要看到 的那個(gè)對(duì)話框
? ? 下面我們來看一下獲取權(quán)限的代碼,好吧是動(dòng)態(tài)獲取雷则,先來說一下吧
? ? ? ? 剛開始我以為動(dòng)態(tài)獲取只用在代碼中寫就可以了不用去清單文件中去聲名現(xiàn)在知道了只有在清單文件中聲明了才能去動(dòng)態(tài)獲取權(quán)限不然的話直接動(dòng)態(tài)獲取權(quán)限的話是會(huì)失敗的.
? ? ? ? 好吧廢話不多說了代碼演示
? ? ? ? 首先我用的是別人的代碼,主要是本人不會(huì)寫
? ? ? ? 好了好了趕緊上代碼
/申請(qǐng)兩個(gè)權(quán)限辆雾,錄音和文件讀寫
//1、首先聲明一個(gè)數(shù)組permissions月劈,將需要的權(quán)限都放在里面 ?這是一個(gè)相機(jī)權(quán)限和存儲(chǔ)權(quán)限
String[]permissions =new String[]{Manifest.permission.RECORD_AUDIO,
? ? ? ? Manifest.permission.READ_EXTERNAL_STORAGE};
//2度迂、創(chuàng)建一個(gè)mPermissionList,逐個(gè)判斷哪些權(quán)限未授予猜揪,未授予的權(quán)限存儲(chǔ)到mPerrrmissionList中
ListmPermissionList =new ArrayList<>();
private final int mRequestCode =100;//權(quán)限請(qǐng)求碼
? ??????//這里我直接在頁面創(chuàng)建的時(shí)候請(qǐng)求權(quán)限惭墓,其實(shí)不太好,這里只是為了演示
//一般是在觸發(fā)某個(gè)事件的時(shí)候再請(qǐng)求動(dòng)態(tài)權(quán)限而姐,比如點(diǎn)擊按鈕跳轉(zhuǎn)到一個(gè)拍照頁面腊凶,如果權(quán)限通過就跳轉(zhuǎn),否者吐司說沒有權(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();//清空沒有通過的權(quán)限
//逐個(gè)判斷你要的權(quán)限是否已經(jīng)通過
? ? for (int i =0; 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)限沒有通過钧萍,需要申請(qǐng)
? ? ? ? ActivityCompat.requestPermissions(this, permissions, mRequestCode);
? ? }else {
//說明權(quán)限都已經(jīng)通過,可以做你想做的事情去
? ? ? ? Log.d("zdlhehda", "權(quán)限通過了");
? ? }
}
//請(qǐng)求權(quán)限后回調(diào)的方法
//參數(shù): requestCode? 是我們自己定義的權(quán)限請(qǐng)求碼
//參數(shù): permissions? 是我們請(qǐng)求的權(quán)限名稱數(shù)組
//參數(shù): grantResults 是我們?cè)趶棾鲰撁婧笫欠裨试S權(quán)限的標(biāo)識(shí)數(shù)組政鼠,數(shù)組的長度對(duì)應(yīng)的是權(quán)限名稱數(shù)組的長度风瘦,數(shù)組的數(shù)據(jù)0表示允許權(quán)限,-1表示我們點(diǎn)擊了禁止權(quán)限
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
? ? boolean hasPermissionDismiss =false;//有權(quán)限沒有通過
? ? if (mRequestCode == requestCode) {
for (int i =0; i < grantResults.length; i++) {
if (grantResults[i] == -1) {
hasPermissionDismiss =true;
? ? ? ? ? ? }
}
//如果有權(quán)限沒有被允許
? ? ? ? if (hasPermissionDismiss) {
showPermissionDialog();//跳轉(zhuǎn)到系統(tǒng)設(shè)置權(quán)限頁面公般,或者直接關(guān)閉頁面万搔,不讓他繼續(xù)訪問
? ? ? ? }else {
//全部權(quán)限通過,可以進(jìn)行下一步操作俐载。蟹略。。
? ? ? ? ? ? Log.d("zdlhehda", "權(quán)限通過了");
? ? ? ? }
}
}
/**
* 不再提示權(quán)限時(shí)的展示對(duì)話框
*/
AlertDialogmPermissionDialog;
StringmPackName ="com.huawei.liwenzhi.weixinasr";
private void showPermissionDialog() {
if (mPermissionDialog ==null) {
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) {
cancelPermissionDialog();
? ? ? ? ? ? ? ? ? ? ? ? Uri packageURI = Uri.parse("package:" +mPackName);
? ? ? ? ? ? ? ? ? ? ? ? Intent intent =new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, packageURI);
? ? ? ? ? ? ? ? ? ? ? ? startActivity(intent);
? ? ? ? ? ? ? ? ? ? }
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
? ? ? ? ? ? ? ? ? ? public void onClick(DialogInterface dialog, int which) {
//關(guān)閉頁面或者做其他操作
? ? ? ? ? ? ? ? ? ? ? ? cancelPermissionDialog();
? ? ? ? ? ? ? ? ? ? }
})
.create();
? ? }
mPermissionDialog.show();
}
//關(guān)閉對(duì)話框
private void cancelPermissionDialog() {
mPermissionDialog.cancel();
}