Voip在睡眠状态下的应用

时间:2016-07-22 10:25:11

标签: android sip voip wakelock

想象一下,我们有SIP堆栈Voip Android应用程序,我们希望接收消息,并在睡眠模式下调用。

通过使用ADB,我们将设备置于IDLE状态,并且没有任何来自信令接收传入消息的源。 AlarmClock和Service都不适用于此任务!所以除了GCM之外,没有办法处理IDLE状态下的动作!或者我错了?

我探讨了有关电池优化和睡眠状态的所有文档。谷歌刚刚谈到Voip应用程序有趣的事情:

  

不,由于技术依赖于另一个,无法使用GCM   消息服务或Doze和App Standby打破了核心功能   应用程序。

那么,这是什么意思?我们不需要使用GCM,但总是让设备处于活动状态,对于这个问题 - 没关系?我只是想知道,在VoiP应用程序中睡眠状态下的聆听动作是什么,这是正确的方法!

谢谢!

1 个答案:

答案 0 :(得分:1)

始终能够接收传入消息的解决方案如下:

创建一个始终在后台运行的service并从那里运行您的sipstack。

锁定WiFi,因为设备可以配置为在进入空闲状态时关闭WiFi:

private WifiLock wifiLock = null;
ContentResolver ctntResolver = appcontext.getContentResolver();
int set = android.provider.Settings.Global.WIFI_SLEEP_POLICY_NEVER;
android.provider.Settings.System.putInt(ctntResolver, android.provider.Settings.Global.WIFI_SLEEP_POLICY, set);

防止CPU脱机:

private WakeLock screenandcpuLockalways = null;
private PowerManager powermanager = null;
public void SetScreenAndCPULockAlways(boolean on)
{               
    if (on)
    {
        if (screenandcpuLockalways != null && screenandcpuLockalways.isHeld())
        {

        }
        else
        {
            if (powermanager == null)
            {
                powermanager = (PowerManager) appcontext.getSystemService(Context.POWER_SERVICE);
            }

            screenandcpuLockalways = powermanager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE,"MyApp");
            screenandcpuLockalways.acquire();
        }
    }
    else
    {
        if (screenandcpuLockalways != null && screenandcpuLockalways.isHeld())
        {               
            screenandcpuLockalways.release();
        }
    }               
}