我在其他应用程序顶部显示一个对话框。直到我使用WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
当我将目标版本更改为26时,我不应该使用TYPE_SYSTEM_ALERT,所以我使用了WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
之后,我的对话框不可见。我还要做什么?有任何建议。
参考链接: https://developer.android.com/about/versions/oreo/android-8.0-changes#cwt
代码:
final Dialog dialog = new Dialog(getApplicationContext());
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.permission);
dialog.setCancelable(true);
dialog.show();
答案 0 :(得分:1)
对于奥利奥及以上设备,我们必须使用TYPE_APPLICATION_OVERLAY,对于以下设备,我们必须使用TYPE_SYSTEM_ALERT
final Dialog dialog = new Dialog(getApplicationContext());
if(oreoAndAbove) {
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
} else {
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
}
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.permission);
dialog.setCancelable(true);
dialog.show();
答案 1 :(得分:0)
您可能会错过对应用程序的请求权限。请在显示窗口之前检查它。如果应用没有权限,请提出要求。
1。通过以下方式检查权限:
public boolean checkPermission(Context context){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return Settings.canDrawOverlays(context);
} else {
return true;
}
}
2.do通过以下方式请求许可
context.startActivity(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + context.packageName)))