19

我有一个带有 WiFi 锁的 Android 前台服务,它充当另一个本地设备的 Web 服务。在打瞌睡模式之前,获取 WiFi 锁并根据需要提供服务非常有效。

即使我的应用程序关闭了电池优化,当屏幕关闭几分钟时,手机仍然会终止应用程序。

如何正确提醒 Android 客户明确请求的服务正在前台执行,并且他们不希望手机此时进入睡眠状态?

编辑:这个问题在 Android 8.0 (Oreo) 中仍然存在

4

2 回答 2

2

你可以这样做:就像你调用你的服务一样,你可以添加一个代码来保持屏幕唤醒。这将避免手机自动锁定。下面是来自文档的示例代码片段。

    public class MainActivity extends Activity {
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //keep screen awake
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
      }

这种方法的优点是,与唤醒锁不同,它不需要特殊权限,并且平台可以正确管理用户在应用程序之间的移动,而您的应用程序无需担心释放未使用的资源。此外,您可以按照此 SO答案中所述的有效方式使用警报管理器:

于 2017-05-09T04:46:12.043 回答
0

尝试使用前台服务 - https://developer.android.com/guide/components/services.html#Foreground

前台服务是用户主动了解的服务,并且不是系统在内存不足时终止的候选服务。前台服务必须为位于 Ongoing 标题下的状态栏提供通知。这意味着除非服务停止或从前台删除,否则无法关闭通知。

您也可以尝试 FULL_WAKE_LOCK 或 SCREEN_DIM_WAKE_LOCK 看看它是否会阻止您的设备进入打盹模式。请参阅 - https://developer.android.com/reference/android/os/PowerManager.html#FULL_WAKE_LOCK

于 2017-05-08T18:41:38.467 回答