protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
ImageView img = (ImageView) findViewById(R.id.img);
ImageManager.bindImage(img, R.mipmap.ic_main, this);
}
- getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
protected void onResume() {
super.onResume();
hideBottomUIMenu();
if (isFirst) {
isFirst = false;
new CountDownTimer(2000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
checkPermission();
}
}.start();
}
}
protected void hideBottomUIMenu() {
//隐藏虚拟按键,并且全屏
if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api
View v = this.getWindow().getDecorView();
v.setSystemUiVisibility(View.GONE);
} else if (Build.VERSION.SDK_INT >= 19) {
//for new api versions.
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
}
}
- new CountDownTimer(2000, 1000){ }
public void checkPermission() {
//必要的权限申请提示对话框
final NecessaryPerDialog necessaryPerDialog = new NecessaryPerDialog(mContext, PERMISSIONS,false);
necessaryPerDialog.setOnClickBtnListener(new NecessaryPerDialog.OnClickBtnListener() {
@Override
public void onAgree() {
//申请权限
ActivityCompat.requestPermissions((Activity) mContext,PERMISSIONS,1);
necessaryPerDialog.dismiss();
}
@Override
public void onRefuse() {
finish();
}
});
if (!hasAllPermission()) {
necessaryPerDialog.show();
} else {
forwardMain();
}
}
- Dialog
public void onBackPressed() {
}
申请权限:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
boolean hasAllGranted = true;
for (int i = 0; i < grantResults.length; ++i) {
if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
hasAllGranted = false;
//在用户已经拒绝授权的情况下,如果shouldShowRequestPermissionRationale返回false则
// 可以推断出用户选择了“不在提示”选项,在这种情况下需要引导用户至设置页手动授权
if (!ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[i])) {
//解释原因,并且引导用户至设置页手动授权
final ToPermisstionSettingDialog settingDialog = new ToPermisstionSettingDialog(mContext, "请到设置页面,开放读写储存权限、读取手机状态、定位权限,以便于我们提供为您更好的服务");
settingDialog.setOnClickBtnListener(new ToPermisstionSettingDialog.OnClickBtnListener() {
@Override
public void onClick() {
settingDialog.dismiss();
//引导用户至设置页手动授权
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getApplicationContext().getPackageName(), null);
intent.setData(uri);
startActivityForResult(intent,2);
}
@Override
public void onCancel() {
finish();
}
});
settingDialog.show();
} else {
//权限请求失败,但未选中“不再提示”选项
finish();
}
break;
}
}
if (hasAllGranted) {
//权限请求成功
forwardMain();
}
}
权限申请:
ContextCompat.checkSelfPermission
检查应用是否具有某个危险权限。如果应用具有此权限,方法将返回 PackageManager.PERMISSION_GRANTED,并且应用可以继续操作。如果应用不具有此权限,方法将返回 PackageManager.PERMISSION_DENIED且应用必须明确向用户要求权限ActivityCompat.requestPermissions
应用可以通过这个方法动态申请权限,调用后会弹出一个对话框提示用户授权所申请的权限。ActivityCompat.shouldShowRequestPermissionRationale
如果应用之前请求过此权限但用户拒绝了请求,此方法将返回 true。如果用户在过去拒绝了权限请求,并在权限请求系统对话框中选择了 Don't ask again 选项,此方法将返回 false。如果设备规范禁止应用具有该权限,此方法也会返回 false。onRequestPermissionsResult
当应用请求权限时,系统将向用户显示一个对话框。当用户响应时,系统将调用应用的 onRequestPermissionsResult() 方法,向其传递用户响应,处理对应的场景。