您的应用程序可以在没有“正常”UI 的情况下运行,只需作为Service
,根据您的链接,但我认为您链接的代码可能稍微过时了。
请记住,您的服务必须在前台运行 - 代码在您的链接中提供,但未显式调用。如果不在前台运行,系统很可能会停止您的应用程序而不是在后台运行它。
当我使用此类覆盖创建任务切换器时,我发现有必要使用TYPE_SYSTEM_ALERT
而不是TYPE_SYSTEM_OVERLAY
.
- Android 4.x - 系统覆盖 - 无法捕获触摸事件 https://stackoverflow.com/a/21136244/383414
我声明我的窗口参数没有FLAG_WATCH_OUTSIDE_TOUCH
.
WindowManager.LayoutParams params =
new WindowManager.LayoutParams(width, height, x, y,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);
您的服务还应该确保正确地从WindowManager
当它结束时。如果没有这个,你的应用程序将泄漏内存。
public void onDestroy()
{
super.onDestroy();
if (overlay != null)
{
((WindowManager) getSystemService(WINDOW_SERVICE)).removeView(overlay);
overlay = null;
}
}
我看到这是在完成的OverlayView.destory()
(注意拼写错误该方法名称的名称 - 最好为该方法使用正确的名称)。