2016-09-29 102 views
18

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

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

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

编辑:这个问题仍然存在于Android的8.0(奥利奥)

回答

0

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

前台服务是用户主动意识到 ,不是一个服务尝试系统在内存不足时候杀死的候选人。 A 前台服务必须提供状态栏 的通知,该通知置于“正在进行”标题下。这意味着,除非该服务停止 或从前台移除,否则不能解除通知 。

您也可以尝试FULL_WAKE_LOCK或SCREEN_DIM_WAKE_LOCK,看看它是否可以防止您的设备进入瞌睡mode.refer - https://developer.android.com/reference/android/os/PowerManager.html#FULL_WAKE_LOCK

+0

中所述的有效方式使用报警管理器,但是如问题的前五个单词中所述,我使用的是前台服务。 – Justin

1

你可以做到这样:就像你打电话给你的服务,你可以添加保持屏幕清醒的代码。这将避免手机自动锁定。以下是文档中的示例代码片段。

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 answer

+0

感谢您的回答。保持屏幕可能会工作。但是,当用户简单地关闭屏幕时,它会消耗更多的电池,而周围的工作也会消失。由于服务器正在运行,我不应该教育他们离开他们的屏幕。 – Justin