Как скрыть диалог Incoming Call над активностью в Android O? - PullRequest
0 голосов
/ 26 августа 2018

До Android 7 мое приложение для блокировки входящих вызовов работает хорошо, и я скрываю диалоговое окно входящего вызова, но в Android 8 диалоговое окно входящего вызова всегда отображается в разделе выше Activity.

       int LAYOUT_FLAG;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
        } else {
            LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
        }
        WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.MATCH_PARENT, LAYOUT_FLAG, 263464,
                WindowManager.LayoutParams.WRAP_CONTENT);

        mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
        winMangr = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
        getWindow().setAttributes(params);
        wraprView = new RelativeLayout(getBaseContext());
        View.inflate(this, mLayout, wraprView);
        winMangr.addView(wraprView, params);

Вот несколько скриншотов

Android 7

App on Android 7.0

Android 8

enter image description here

1 Ответ

0 голосов
/ 26 августа 2018

Вы можете зарегистрировать событие изменения фокуса окна, а затем отправить android.intent.action.CLOSE_SYSTEM_DIALOGS широковещательную рассылку, чтобы закрыть все системные диалоги.

@Override
public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);

        if (! hasFocus) {
            Intent closeDialog = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
            sendBroadcast(closeDialog);
        }
}

Но учтите, что это приведет к закрытию ВСЕХ системных диалогов (включая диалоговое окно «Выключение / перезагрузка»), которые не позволяют пользователям выключать телефон во время работы приложения.

...