我有一个应用程序通过服务创建系统警报窗口。Android系统警报窗口关闭并定期打开
在MainActivity
我实例化意图:
i = new Intent(getApplicationContext(), TintOverlayService.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
在TintOverlayService,我创建了系统警报窗口,像这样:
LayoutInflater li = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
windowManager = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
mTopView = (ViewGroup) li.inflate(R.layout.red_overlay, null);
mTopView.setBackgroundColor(Color.parseColor(colorCode.replace("#", tintValue)));
DisplayMetrics dm = getApplicationContext().getResources().getDisplayMetrics();
int densityDpi = dm.densityDpi;
int LayoutParamFlags = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION
| WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
densityDpi * 6,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
LayoutParamFlags,
PixelFormat.TRANSLUCENT);
而且TintOverlayService的onStartCommand覆盖回报:
return START_STICKY;
这成功创建了一个完整的覆盖t他筛选,到边缘。即使在应用程序之外,正如预期的那样。
但是,当您激活覆盖并杀死应用程序。覆盖层将闪烁一两秒钟,然后再次启动。或者,如果您只是通过浏览互联网或观看视频来使用手机,覆盖屏幕会在几秒到三十秒之间的任何地方关闭,然后重新开启。
任何想法指向正确的方向将是有益的。我一直试图弄清楚这一点现在。
杀死它只是压力测试它。我认为这是杀死应用程序的情况。最让我担心的是,当你正常使用手机时,叠加层会被杀死并重新启动。我不确定是否有办法补丁,或只是一个愚蠢的机器人的东西。 – cfisher
你想要什么行为?如果覆盖图应该在应用程序死亡/崩溃时保持移除状态,则START_NOT_STICKY应解决此问题。 – chevalier
我希望它留下来。问题是,它会关闭并定期重启。即使没有杀死应用程序。所以,你打开覆盖层并切换到其他应用程序或开始浏览互联网。最终,叠加层将打开和关闭。 – cfisher