WindowsManager Bad Token Exception: Невозможно добавить окно - нулевой токен недействителен; ваша деятельность идет? - PullRequest
0 голосов
/ 11 июля 2020

Я работаю над настраиваемым приложением клавиатуры (не использую Keyboardview) и пытаюсь реализовать всплывающее окно при нажатии клавиши, и я использую всплывающее окно, чтобы отображать всплывающее окно при каждом нажатии клавиши. Он работает в большинстве случаев, но иногда выдает Bad Token Exception - Unable to add window - is your activity running? Поскольку здесь нет активности и работает только служба InputMethod, я не уверен, как это решить.

Код, который я использую для отображения всплывающего окна

private void layoutAndShowPopupWindow(Key key, int xPosition, ViewGroup popupView) {

    popupWindow = new PopupWindow(popupView, key.getWidth(), key.getHeight() * 2);
    popupWindow.setOutsideTouchable(true);
    popupWindow.setClippingEnabled(false);// <-- let popup display above keyboard
    int[] location = new int[2];
    key.getLocationInWindow(location);
    int measureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
    popupView.measure(measureSpec, measureSpec);
    int popupWidth = popupView.getMeasuredWidth();
    int spaceAboveKey = 0;
    int x = xPosition - popupWidth / popupView.getChildCount() / 3;
    int y = location[1] - popupView.getMeasuredHeight() - spaceAboveKey;
    popupWindow.showAtLocation(key, Gravity.NO_GRAVITY, x, y);

}

Ошибка:

 android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
        at android.view.ViewRootImpl.setView(ViewRootImpl.java:983)
        at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:398)
        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:96)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...