问题描述
在本地环境中,我有一些 Android 设备与前台服务中的 Web 套接字连接。 此套接字连接仅侦听消息并将它们推送到推送通知。 有时您可能数小时或数天都收不到消息,因此这需要非常稳定。
当屏幕处于锁定模式时,推送通知有效,前几分钟连接正常。如果在 10-15 分钟后推送消息,则不会显示通知消息。 一旦出现另一条消息,上一条消息就会突然被选中并显示出来。 60 分钟或更长时间后,根本不会显示任何消息。连接似乎不再完整,服务器和应用程序日志也没有显示连接丢失。
我已经为此进行了超过 4 天的密集工作,但令我沮丧的是,这并没有奏效。 我找到了很多与此主题相关的主题,关闭了应用程序的优化,每分钟发送一次 ping (StayAlive) 到服务器,但都无济于事。
是否有其他选项可以通过前台服务与服务器建立稳定的连接?
请告诉我。
提前致谢。
解决方法
它已修复。
通过在我的清单和代码中添加以下权限,应用程序不再打瞌睡。
<uses-permission
android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
Java 代码:
public void turnOffDozeMode(Context context){ //you can use with or without passing context
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Intent intent = new Intent();
String packageName = context.getPackageName();
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (pm.isIgnoringBatteryOptimizations(packageName)) // if you want to desable doze mode for this package
intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
else { // if you want to enable doze mode
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + packageName));
}
context.startActivity(intent);
}
}
来源: how to turn off doze mode for specific apps in marshmallow devices programmatically