Android VoIP应用程序的睡眠和待机模式

Android VoIP应用程序的睡眠和待机模式,android,alarmmanager,android-6.0-marshmallow,android-doze-and-standby,Android,Alarmmanager,Android 6.0 Marshmallow,Android Doze And Standby,我有一个传统的VoIP应用程序,我想为它提供Android新的睡眠和待机模式支持。我有自己的消息/信号机制,无法使用Android的GCM功能。文档中指出,将应用程序列为白名单将允许使用自己的信号机制,并使应用程序在打瞌睡模式下保持活动状态 另外,我正在使用setExtract()和setRepeating()当前生成keepAlive警报,以保持XMPP的持久连接处于活动状态。如果我为新版本添加setExactAndAllowHileIDLE,则说明-警报最多每15分钟触发一次。但我需要每隔1

我有一个传统的VoIP应用程序,我想为它提供Android新的睡眠和待机模式支持。我有自己的消息/信号机制,无法使用Android的GCM功能。文档中指出,将应用程序列为白名单将允许使用自己的信号机制,并使应用程序在打瞌睡模式下保持活动状态

另外,我正在使用
setExtract()
setRepeating()
当前生成keepAlive警报,以保持XMPP的持久连接处于活动状态。如果我为新版本添加
setExactAndAllowHileIDLE
,则说明-警报最多每15分钟触发一次。但我需要每隔12秒生成一个。我浏览了Android文档,在SO中找到了许多线程。似乎我想通过将应用程序列为白名单并使用
AlarmManager
的新API来实现的目标并不完全可能


我可以做些什么来保持我的功能与以前一样?在打瞌睡和待机模式下保持应用程序的活动状态,以12秒的间隔生成报警警报,以保持连接活动并保持网络连接打开?

通过禁用电池优化将应用程序列为白色将使应用程序始终保持活动状态

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    String packageName = getPackageName();
    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    if (!pm.isIgnoringBatteryOptimizations(packageName)) {
        Intent intent = new Intent();
        intent.setAction(android.provider.Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
        intent.setData(Uri.parse("package:" + packageName));
        startActivity(intent);
    }
}
Android清单:

<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />


尽管新的
AlarmManager
API
SetExactAndAllowHileId
未按要求在12秒内调用。解决方案是-我们使用以前的JNI代码,通过使用计时器线程在12秒内发送keep alive警报来发送keep alive。当应用程序处于活动状态时,无论警报是否工作,计时器线程都将处于活动状态


我的应用程序有一个非常复杂的要求,我不能使用GCM高优先级消息。但像Skype这样的大多数VoIP应用程序并没有禁用电池优化功能,而是使用GCM在打瞌睡模式下发送通知/消息

检查这个:我已经检查过了。你想让我注意到的要点是什么?“通过使用计时器线程发送保持活动”你是指C计时器时间?