0

在 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);

这里有一些截图

安卓 7

Android 7.0 上的应用程序

安卓 8

在此处输入图像描述

4

1 回答 1

0

您可以注册一个窗口焦点更改事件,然后发送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);
        }
}

但请注意,这样做会强制关闭所有系统对话框(包括关机/重启对话框),这会阻止用户在您的应用运行时关闭手机。

于 2018-08-26T05:30:04.617 回答