Android 关于隐藏系统警报的IllegalArgumentException

Android 关于隐藏系统警报的IllegalArgumentException,android,illegalargumentexception,Android,Illegalargumentexception,我试图在接到电话时添加系统警报,就像TrueCaller应用程序那样。它是针对企业应用程序的,因此用户知道其功能 我可以添加系统警报,但无法隐藏它。我一隐藏它,它就会生成IllegalArgumentException 以下是我为添加系统警报所做的操作- inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); windowManager = (WindowManager) this.getSys

我试图在接到电话时添加系统警报,就像TrueCaller应用程序那样。它是针对企业应用程序的,因此用户知道其功能

我可以添加系统警报,但无法隐藏它。我一隐藏它,它就会生成IllegalArgumentException

以下是我为添加系统警报所做的操作-

inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
        windowManager = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
        preRootView = inflater.inflate(R.layout.alert_pre_call_overlay, null);
LayoutParams params = new LayoutParams(
                LayoutParams.MATCH_PARENT,
                LayoutParams.WRAP_CONTENT, LayoutParams.TYPE_SYSTEM_ALERT,
                LayoutParams.FLAG_NOT_TOUCH_MODAL |
                        LayoutParams.FLAG_NOT_FOCUSABLE| LayoutParams.FLAG_NOT_TOUCHABLE|LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
                PixelFormat.TRANSLUCENT);

        params.gravity = Gravity.TOP;


        windowManager.addView(preRootView, params);
为了隐藏视图,我调用以下代码-

windowManager.removeView(preRootView);
删除视图时,这是我得到的错误-

W/System.err﹕ java.lang.IllegalArgumentException: View=android.widget.LinearLayout{64ea0ff8 V.E..... ......I. 0,0-768,473 #7f060007 app:id/preCallBox} not attached to window manager
W/System.err﹕ at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:370)
W/System.err﹕ at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:299)
W/System.err﹕ at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:79)
W/System.err﹕ at com.appcall.CallOverlay.onRefreshData(CallOverlay.java:213)
W/System.err﹕ at com.appcall.Manager.CommandParser.sendRefreshData(CommandParser.java:458)
W/System.err﹕ at com.appcall.Manager.CommandParser.sendExitCode(CommandParser.java:352)
W/System.err﹕ at com.appcall.XMPPService.onCallStateChanged(XMPPService.java:403)
W/System.err﹕ at com.appcall.PhoneStateMonitor.onCallStateChanged(PhoneStateMonitor.java:137)
W/System.err﹕ at android.telephony.PhoneStateListener$2.handleMessage(PhoneStateListener.java:369)
W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err﹕ at android.os.Looper.loop(Looper.java:136)
W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5001)
W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method)
W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
我已经搜索了这个异常,但是我只找到了关于AlertDialogs的问题

我没有为此活动使用setContentView,而是使用系统警报。这可能是原因吗


所以我的问题是,如何在不破坏我的应用程序的情况下隐藏警报?

不管怎样,我添加了preRootView并试图删除preCallBox。我真的需要重新考虑我的命名惯例