Я пытаюсь показать 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)