【发布时间】:2016-08-10 09:33:27
【问题描述】:
我在 API 23 的自定义对话框中遇到了一个问题,它崩溃了。
final Dialog dialog = new Dialog(getActivity());
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.progress_dialog);
dialog.setCancelable(false);
dialog.show();
崩溃报告:
android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@3387043 -- permission denied for this window type
at android.view.ViewRootImpl.setView(ViewRootImpl.java:598)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:310)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:86)
at android.app.Dialog.show(Dialog.java:319)
at com.example.hello.fragment.ExploreFragment.exploreBeers(ExploreFragment.java:255)
at com.example.hello.fragment.ExploreFragment$4.onEditorAction(ExploreFragment.java:203)
at android.widget.TextView.onEditorAction(TextView.java:4773)
at com.android.internal.widget.EditableInputConnection.performEditorAction(EditableInputConnection.java:139)
at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:304)
at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:78)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:152)
at android.app.ActivityThread.main(ActivityThread.java:5497)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
清单权限:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
这根本不起作用我有点困惑,请仔细阅读我的帖子并建议我一些解决方案。
【问题讨论】:
-
此窗口类型的权限被拒绝。您需要在启动该功能之前询问运行时权限。
-
嘿谢谢你能告诉我怎么做吗??
-
使用 LayoutParams.TYPE_TOAST 或 TYPE_APPLICATION_PANEL
-
你可以看看我下面关于如何在 Lolipop 及以上实现运行时权限的回答
标签: android dialog android-windowmanager