github地址(Demo下載)
https://github.com/zhouxu88/EasyPermission
一寓娩、簡介:
android6.0 開始,權(quán)限的申請發(fā)生了改變达址,申請變的動(dòng)態(tài)化,也就是運(yùn)行時(shí)權(quán)限趁耗,EasyPermission 可以幫助簡化權(quán)限申請的流程沉唠,同時(shí)使得代碼更加具有邏輯。對申請的結(jié)果進(jìn)行統(tǒng)一的返回苛败。而且當(dāng)用戶拒絕了權(quán)限满葛,任然可以通過打開系統(tǒng)設(shè)置,手動(dòng)授權(quán)后罢屈,返回APP嘀韧,繼續(xù)操作,可以說是完美的解決了幾乎所有可能發(fā)生的情況,強(qiáng)烈推薦缠捌。
android6.0 開始锄贷,權(quán)限的申請發(fā)生了改變,申請變的動(dòng)態(tài)化曼月,也就是運(yùn)行時(shí)權(quán)限谊却,和 iOS 相仿,動(dòng)態(tài)化的意思是指十嘿,在每次使用需要危險(xiǎn)權(quán)限的方法的時(shí)候因惭,需要檢查程序是否獲得了該權(quán)限的許可。動(dòng)態(tài)化的權(quán)限申請能夠讓用戶更加清晰的知道程序需要什么權(quán)限绩衷,以及程序中哪些地方的操作需要涉及用戶安全蹦魔。不再是僅僅在程序安裝的時(shí)候激率,一次性把所需要的普通的、危險(xiǎn)級(jí)別的權(quán)限一次性列出來勿决,然后展示給用戶乒躺。 EasyPermissionUtil 可以幫助簡化權(quán)限申請的流程,同時(shí)使得代碼更加具有邏輯低缩。對申請的結(jié)果進(jìn)行統(tǒng)一的返回嘉冒。
二、如何使用
首先咆繁,引用庫
dependencies {
compile 'pub.devrel:easypermissions:0.3.0'
}
同樣讳推,easypermissions處理權(quán)限分為3步。
1 玩般、檢查權(quán)限
if (Build.VERSION.SDK_INT >= 23) {
//打電話的權(quán)限
String[] mPermissionList = new String[]{Manifest.permission.CALL_PHONE};
if (EasyPermissions.hasPermissions(mContext, mPermissionList)) {
//已經(jīng)同意過
call();
} else {
//未同意過,或者說是拒絕了银觅,再次申請權(quán)限
EasyPermissions.requestPermissions(
this, //上下文
"需要撥打電話的權(quán)限", //提示文言
CALL_PHONE_REQUEST_CODE, //請求碼
mPermissionList //權(quán)限列表
);
}
} else {
//6.0以下,不需要授權(quán)
call();
}
2坏为、 申請權(quán)限
EasyPermissions.requestPermissions(
this, //上下文
"需要撥打電話的權(quán)限", //提示文言
CALL_PHONE_REQUEST_CODE, //請求碼
mPermissionList //權(quán)限列表
);
3 處理EasyPermissions.PermissionCallbacks的回調(diào)接口究驴,直接處理權(quán)限是否成功申請
//同意授權(quán)
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// Forward results to EasyPermissions
//跳轉(zhuǎn)到onPermissionsGranted或者onPermissionsDenied去回調(diào)授權(quán)結(jié)果
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
@Override
public void onPermissionsGranted(int requestCode, List<String> list) {
// Some permissions have been granted
// ...
Log.i(TAG, "onPermissionsGranted:" + requestCode + ":" + list.size());
call();
}
//拒絕授權(quán)
@Override
public void onPermissionsDenied(int requestCode, List<String> perms) {
// Some permissions have been denied
// ...
Log.i(TAG, "onPermissionsDenied:" + requestCode + ":" + perms.size());
// (Optional) Check whether the user denied any permissions and checked "NEVER ASK AGAIN."
// This will display a dialog directing them to enable the permission in app settings.
if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
new AppSettingsDialog.Builder(this).build().show();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == AppSettingsDialog.DEFAULT_SETTINGS_REQ_CODE) {
//拒絕授權(quán)后,從系統(tǒng)設(shè)置了授權(quán)后匀伏,返回APP進(jìn)行相應(yīng)的操作
Log.i(TAG, "onPermissionsDenied:------>自定義設(shè)置授權(quán)后返回APP");
call();
}
}