AlertDialog в InputmethodService - PullRequest
0 голосов
/ 11 июля 2020

Я пытаюсь показать AlertDialog в службе inputmethod моего пользовательского приложения клавиатуры, но получаю исключение Bad Token Exception. Я использую службу в качестве контекста, поскольку IME не запускается в контексте IME и пытаюсь использовать окно IME вместо обычного окна приложения, но каждый раз получаю исключение WindowManager Bad token. Чтобы показать диалог, который я сделал:

private void showDialog(){
    ContextThemeWrapper ctx = new ContextThemeWrapper(this, R.style.AppTheme);
    MaterialAlertDialogBuilder builder=new MaterialAlertDialogBuilder(ctx);
    builder.setTitle("Test Test");

    Window window = builder.create().getWindow();

    WindowManager.LayoutParams lp = window.getAttributes();

    lp.token= getWindow().getWindow().getAttributes().token;

    lp.type = WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG;

    window.setAttributes(lp);

    window.addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

    builder.show();

}

Logcat:

 Process: com.xx.xx.keyboard, PID: 28128
    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)
        at android.app.Dialog.show(Dialog.java:342)
        at androidx.appcompat.app.AlertDialog$Builder.show(AlertDialog.java:1009)
        at com.xx.xx.keyboard.Keyboard.KeyboardService.showDialog(KeyboardService.java:757)
        at com.xx.xx.keyboard.Keyboard.KeyboardService.lambda$onCreateCandidatesView$0$KeyboardService(KeyboardService.java:193)
        at com.xx.xx.keyboard.Keyboard.-$$Lambda$KeyboardService$zX99-PyfsR2haEOeHaKn9AXCIy0.onClick(Unknown Source:4)
        at android.view.View.performClick(View.java:7201)
        at android.view.View.performClickInternal(View.java:7170)
        at android.view.View.access$3500(View.java:806)
        at android.view.View$PerformClick.run(View.java:27582)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7710)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...