【问题标题】:Doze and Standby mode for VoIP appVoIP 应用程序的打盹和待机模式
【发布时间】:2015-12-14 09:22:39
【问题描述】:

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

我目前正在使用setExtract()setRepeating() 生成keepAlive 警报,以保持XMPP 的持久连接。如果我为较新的版本添加setExactAndAllowWhileIdle,则说明 - 每 15 分钟最多会触发一次警报。但我需要每隔 12 秒生成 1 个。我浏览了 Android 文档,SO 中的许多线程,并在上面找到了an article。通过将应用程序列入白名单并使用AlarmManager 的新 API,我似乎无法完全实现。

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

【问题讨论】:

标签: android alarmmanager android-6.0-marshmallow android-doze-and-standby


【解决方案1】:

通过禁用电池优化将应用列入白名单可以让应用始终保持运行状态。

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 setExactAndAllowWhileIdle 没有按要求在十二秒间隔内被调用。解决方案是 - 我们使用之前的 JNI 代码,并且我们通过使用 Timer 线程以 12 秒的间隔发送保持活动警报来发送保持活动状态。由于应用程序处于活动状态,因此无论警报是否工作,计时器线程都将处于活动状态。

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

【讨论】:

  • “使用 Timer 线程发送保持活动”你的意思是 C 定时器 time_t?
猜你喜欢
  • 1970-01-01
  • 2015-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多