简单实现动态申请权限的步骤:
在此之前,需要在 AndroidManifest.xml里定义需要申请的权限
- 写一个专门检测权限的工具类 (方便以后直接移植到其他项目中)
- 在onCreate方法使用该工具类申请权限
- 申请权限回调方法
- 编写CheckPermissionUtils
**
* 检测权限工具类
*/
public final class CheckPermissionUtils {
private CheckPermissionUtils() {
}
// 需要申请的权限
private static String[] permissions = new String[] {
Manifest.permission.ACCESS_FINE_LOCATION, //位置
Manifest.permission.READ_PHONE_STATE //手机状态
};
// 检测权限
public static String[] checkPermission(Context context) {
List<String> data = new ArrayList<>(); // 存储未申请的权限
for (String permission : permissions) {
int checkSelfPermission = ContextCompat.checkSelfPermission(context, permission);
if (checkSelfPermission == PackageManager.PERMISSION_DENIED) { // 判断是否未申请
data.add(permission);
}
}
return data.toArray(new String[data.size()]);
}
}
- 使用 CheckPermissionUtils
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
// 检测权限
String[] permissions = CheckPermissionUtils.checkPermission(this);
if (permissions.length == 0) {
// 需要申请的权限都申请了
// 2s 后进入主界面
handler.sendEmptyMessageDelayed(ENTER_MAIN_UI, 2000);
} else {
// 申请权限
ActivityCompat.requestPermissions(this, permissions, 100);
}
}
- 申请回调
/**
* 申请权限返回
* @param requestCode 返回码
* @param permissions 权限
* @param grantResults 结果
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 100) {
for (int grantResult : grantResults) {
// 拒绝操作
if (grantResult == PackageManager.PERMISSION_DENIED) {
finish();
return;
}
}
// 1s 进入主界面
handler.sendEmptyMessageDelayed(ENTER_MAIN_UI, 1000);
}
}
网友评论