Диалог не виден, когда я использую TYPE_APPLICATION_OVERLAY - PullRequest
0 голосов
/ 29 октября 2018

Я показываю диалоговое окно поверх других приложений. это работает, пока я не использую 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();

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Для устройств oreo и выше мы должны использовать 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();
0 голосов
/ 29 октября 2018

Вы можете пропустить запрос разрешения для вашего приложения. Перед показом окна проверьте его. Если приложение не имеет разрешения, запросите его.

1.проверьте разрешение по:

public boolean checkPermission(Context context){
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        return Settings.canDrawOverlays(context);
    } else {
        return true;
    }
}

2.до запроса разрешения:

context.startActivity(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + context.packageName)))
...