android 6.0 動態(tài)獲取權(quán)限 解決方案

/**

*權(quán)限獲取頁面

*

* Created by wangchenlong on 16/1/26.

*/

public classPermissionsActivityextendsAppCompatActivity {

public static final intPERMISSIONS_GRANTED=0;//權(quán)限授權(quán)

public static final intPERMISSIONS_DENIED=1;//權(quán)限拒絕

private static final intPERMISSION_REQUEST_CODE=0;//系統(tǒng)權(quán)限管理頁面的參數(shù)

private static finalStringEXTRA_PERMISSIONS=

"me.chunyu.clwang.permission.extra_permission";//權(quán)限參數(shù)

private static finalStringPACKAGE_URL_SCHEME="package:";//方案

privatePermissionsCheckermChecker;//權(quán)限檢測器

private booleanisRequireCheck;//是否需要系統(tǒng)權(quán)限檢測

//啟動當(dāng)前權(quán)限頁面的公開接口

public static voidstartActivityForResult(Activity activity,intrequestCode, String... permissions) {

Intent intent =newIntent(activity, PermissionsActivity.class);

intent.putExtra(EXTRA_PERMISSIONS, permissions);

ActivityCompat.startActivityForResult(activity, intent, requestCode,null);

}

@Overrideprotected voidonCreate(@NullableBundle savedInstanceState) {

super.onCreate(savedInstanceState);

if(getIntent() ==null|| !getIntent().hasExtra(EXTRA_PERMISSIONS)) {

throw newRuntimeException("PermissionsActivity需要使用靜態(tài)startActivityForResult方法啟動!");

}

setContentView(R.layout.activity_permissions);

mChecker=newPermissionsChecker(this);

isRequireCheck=true;

}

@Overrideprotected voidonResume() {

super.onResume();

if(isRequireCheck) {

String[] permissions = getPermissions();

if(mChecker.lacksPermissions(permissions)) {

requestPermissions(permissions);//請求權(quán)限

}else{

allPermissionsGranted();//全部權(quán)限都已獲取

}

}else{

isRequireCheck=true;

}

}

//返回傳遞的權(quán)限參數(shù)

privateString[] getPermissions() {

returngetIntent().getStringArrayExtra(EXTRA_PERMISSIONS);

}

//請求權(quán)限兼容低版本

private voidrequestPermissions(String... permissions) {

ActivityCompat.requestPermissions(this, permissions,PERMISSION_REQUEST_CODE);

}

//全部權(quán)限均已獲取

private voidallPermissionsGranted() {

setResult(PERMISSIONS_GRANTED);

finish();

}

/**

*用戶權(quán)限處理,

*如果全部獲取,則直接過.

*如果權(quán)限缺失,則提示Dialog.

*

*@paramrequestCode請求碼

*@parampermissions權(quán)限

*@paramgrantResults結(jié)果

*/

@Override

public voidonRequestPermissionsResult(intrequestCode,@NonNullString[] permissions,@NonNullint[] grantResults) {

if(requestCode ==PERMISSION_REQUEST_CODE&& hasAllPermissionsGranted(grantResults)) {

isRequireCheck=true;

allPermissionsGranted();

}else{

isRequireCheck=false;

showMissingPermissionDialog();

}

}

//含有全部的權(quán)限

private booleanhasAllPermissionsGranted(@NonNullint[] grantResults) {

for(intgrantResult : grantResults) {

if(grantResult == PackageManager.PERMISSION_DENIED) {

return false;

}

}

return true;

}

//顯示缺失權(quán)限提示

private voidshowMissingPermissionDialog() {

AlertDialog.Builder builder =newAlertDialog.Builder(PermissionsActivity.this);

builder.setTitle(R.string.help);

builder.setMessage(R.string.string_help_text);

//拒絕,退出應(yīng)用

builder.setNegativeButton(R.string.quit,newDialogInterface.OnClickListener() {

@Overridepublic voidonClick(DialogInterface dialog,intwhich) {

setResult(PERMISSIONS_DENIED);

finish();

}

});

builder.setPositiveButton(R.string.settings,newDialogInterface.OnClickListener() {

@Override

public voidonClick(DialogInterface dialog,intwhich) {

startAppSettings();

}

});

builder.setCancelable(false);

builder.show();

}

//啟動應(yīng)用的設(shè)置

private voidstartAppSettings() {

Intent intent =newIntent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);

intent.setData(Uri.parse(PACKAGE_URL_SCHEME+ getPackageName()));

startActivity(intent);

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末斯议,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子脂崔,更是在濱河造成了極大的恐慌奔浅,老刑警劉巖弥激,帶你破解...
    沈念sama閱讀 210,835評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件百炬,死亡現(xiàn)場離奇詭異懒豹,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)豆村,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評論 2 383
  • 文/潘曉璐 我一進(jìn)店門液兽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人掌动,你說我怎么就攤上這事四啰。” “怎么了粗恢?”我有些...
    開封第一講書人閱讀 156,481評論 0 345
  • 文/不壞的土叔 我叫張陵柑晒,是天一觀的道長。 經(jīng)常有香客問我眷射,道長匙赞,這世上最難降的妖魔是什么恋追? 我笑而不...
    開封第一講書人閱讀 56,303評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮罚屋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嗅绸。我一直安慰自己脾猛,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,375評論 5 384
  • 文/花漫 我一把揭開白布鱼鸠。 她就那樣靜靜地躺著猛拴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蚀狰。 梳的紋絲不亂的頭發(fā)上愉昆,一...
    開封第一講書人閱讀 49,729評論 1 289
  • 那天,我揣著相機(jī)與錄音麻蹋,去河邊找鬼跛溉。 笑死,一個胖子當(dāng)著我的面吹牛扮授,可吹牛的內(nèi)容都是我干的芳室。 我是一名探鬼主播,決...
    沈念sama閱讀 38,877評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼刹勃,長吁一口氣:“原來是場噩夢啊……” “哼堪侯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起荔仁,我...
    開封第一講書人閱讀 37,633評論 0 266
  • 序言:老撾萬榮一對情侶失蹤伍宦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后乏梁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體次洼,經(jīng)...
    沈念sama閱讀 44,088評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,443評論 2 326
  • 正文 我和宋清朗相戀三年掌呜,在試婚紗的時候發(fā)現(xiàn)自己被綠了滓玖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,563評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡质蕉,死狀恐怖势篡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情模暗,我是刑警寧澤禁悠,帶...
    沈念sama閱讀 34,251評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站兑宇,受9級特大地震影響碍侦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,827評論 3 312
  • 文/蒙蒙 一瓷产、第九天 我趴在偏房一處隱蔽的房頂上張望站玄。 院中可真熱鬧,春花似錦濒旦、人聲如沸株旷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,712評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晾剖。三九已至,卻和暖如春梯嗽,著一層夾襖步出監(jiān)牢的瞬間齿尽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,943評論 1 264
  • 我被黑心中介騙來泰國打工灯节, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留循头,地道東北人。 一個月前我還...
    沈念sama閱讀 46,240評論 2 360
  • 正文 我出身青樓炎疆,卻偏偏與公主長得像贷岸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子磷雇,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,435評論 2 348

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