public
class
CheckPermissionsActivity
extends
Activity
implements
ActivityCompat.OnRequestPermissionsResultCallback {
/**
* 需要进行检测的权限数组
*/
protected
String[] needPermissiOns= {
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE
};
private
static
final
int
PERMISSON_REQUESTCODE =
0
;
private
static
final
int
SETTING_REQUESTCODE =
1
;
/**
* 判断是否需要检测,防止不停的弹框
*/
private
boolean
isNeedCheck =
true
;
@Override
protected
void
onResume() {
super
.onResume();
if
(isNeedCheck) {
checkPermissions(needPermissions);
}
}
/**
* @param permissions
* @since 2.5.0
*/
private
void
checkPermissions(String... permissions) {
List<string> needRequestPermissOnList= findDeniedPermissions(permissions);
if
(
null
!= needRequestPermissonList
&& needRequestPermissonList.size() >
0
) {
ActivityCompat.requestPermissions(
this
,
needRequestPermissonList.toArray(
new
String[needRequestPermissonList.size()]),
PERMISSON_REQUESTCODE);
}
}
/**
* 获取权限集中需要申请权限的列表
*
* @param permissions
* @return
* @since 2.5.0
*/
private
List<string> findDeniedPermissions(String[] permissions) {
List<string> needRequestPermissOnList=
new
ArrayList<string>();
for
(String perm : permissions) {
if
(ContextCompat.checkSelfPermission(
this
,
perm) != PackageManager.PERMISSION_GRANTED
|| ActivityCompat.shouldShowRequestPermissionRationale(
this
, perm)) {
needRequestPermissonList.add(perm);
}
}
return
needRequestPermissonList;
}
/**
* 检测是否说有的权限都已经授权
*
* @param grantResults
* @return
* @since 2.5.0
*/
private
boolean
verifyPermissions(
int
[] grantResults) {
for
(
int
result : grantResults) {
if
(result != PackageManager.PERMISSION_GRANTED) {
return
false
;
}
}
return
true
;
}
@Override
public
void
onRequestPermissionsResult(
int
requestCode,
String[] permissions,
int
[] paramArrayOfInt) {
if
(requestCode == PERMISSON_REQUESTCODE) {
if
(!verifyPermissions(paramArrayOfInt)) {
showMissingPermissionDialog();
isNeedCheck =
false
;
}
}
}
/**
* 显示提示信息
*
* @since 2.5.0
*/
private
void
showMissingPermissionDialog() {
AlertDialog.Builder builder =
new
AlertDialog.Builder(
this
);
builder.setTitle(R.string.notifyTitle);
builder.setMessage(R.string.notifyMsg);
builder.setNegativeButton(R.string.cancel,
new
DialogInterface.OnClickListener() {
@Override
public
void
onClick(DialogInterface dialog,
int
which) {
finish();
}
});
builder.setPositiveButton(R.string.setting,
new
DialogInterface.OnClickListener() {
@Override
public
void
onClick(DialogInterface dialog,
int
which) {
startAppSettings();
}
});
builder.setCancelable(
false
);
builder.show();
}
/**
* 启动应用的设置
*
* @since 2.5.0
*/
private
void
startAppSettings() {
Intent intent =
new
Intent(
Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse(
"package:"
+ getPackageName()));
startActivityForResult(intent, SETTING_REQUESTCODE);
}
@Override
public
boolean
onKeyDown(
int
keyCode, KeyEvent event) {
if
(keyCode == KeyEvent.KEYCODE_BACK) {
this
.finish();
return
true
;
}
return
super
.onKeyDown(keyCode, event);
}
@Override
protected
void
onActivityResult(
int
requestCode,
int
resultCode, Intent data) {
super
.onActivityResult(requestCode, resultCode, data);
if
(requestCode == SETTING_REQUESTCODE) {
checkPermissions(needPermissions);
}
}
}</string></string></string></string>