0

Android 7までの着信ロッカーアプリは正常に機能し、着信ダイアログを非表示にしましたが、Android 8の着信ダイアログでは常に上記のアクティビティに表示されます。

       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 に答える