Ошибка во всплывающем входящем звонке: невозможно добавить окно - PullRequest
0 голосов
/ 27 сентября 2019

Я сделал всплывающие окна во время входящего голосового вызова.Для версий выше Android 8.0 выдает следующую ошибку:

Невозможно добавить окно android.view.ViewRootImpl$W@e5b2272 - в типе окна 2003

отказано в разрешенииЭта ссылка описывает решение, но я использую customdiaolog.Ссылка: Android: невозможно добавить окно.В этом типе окна отказано в разрешении

 if (!intent.getAction().equals("android.intent.action.PHONE_STATE"))
        return;

        // Popup
    else {
        this.context = context;
        if(dialog == null){
            dialog = new CustomDialog(context);
            dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
            dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
            dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
                    WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |

                    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
            dialog.show();
        }

 telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        listener = new PhoneStateListener() {
            @Override
            public void onCallStateChanged(int state, String incomingNumber) {
                String stateString = "N/A";
                switch (state) {
                    case TelephonyManager.CALL_STATE_IDLE:
                        stateString = "Idle";
                        dialog.dismiss();
                        break;
                    case TelephonyManager.CALL_STATE_OFFHOOK:
                        stateString = "Off Hook";
                        dialog.dismiss();
                        break;
                    case TelephonyManager.CALL_STATE_RINGING:
                        stateString = "Ringing";
                        dialog.show();
                        break;
                }
            }
        };

1 Ответ

0 голосов
/ 27 сентября 2019

Вам необходимо иметь разрешение ACTION_MANAGE_OVERLAY_PERMISSION, чтобы открывать / отображать оповещение, когда ваше приложение находится в фоновом режиме или не открыто.

 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

  <uses-permission
        android:name="android.permission.INTERNAL_SYSTEM_WINDOW"
        tools:ignore="ProtectedPermissions" />

установить тип оповещения "TYPE_APPLICATION_OVERLAY".

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
            }else{
                dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
            }

Вы должны проверить этот ответ .Если у вас все еще есть сомнения, сообщите мне

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...