2016-07-22 3 views
0

우리는 SIP 스택 Voip Android 응용 프로그램이 있고 우리는 메시지를 받기를 원하고 휴면 모드를 호출한다고 가정합니다.수면 상태의 Voip 응용 프로그램

ADB를 사용하여 장치를 유휴 상태로 만들고 신호로부터 들어오는 메시지를 수신 할 소스가 없습니다. AlarmClock도 서비스도이 작업을위한 제품군이 아닙니다! 그러므로 GCM 외에도 IDLE 상태에서 작업을 처리 할 방법이 없습니다! 아니면 내가 틀렸어?

배터리 최적화 및 절전 상태에 대한 모든 문서를 살펴 보았습니다. 구글은 단지의 VoIP 응용 프로그램 흥미로운 일에 대해 말했다 :

아니오, 다른 메시징 서비스에 있기 때문에 기술 종속의 GCM을 사용하거나 잠자기 및 응용 프로그램 대기가 앱의 핵심 기능을 분리 할 수 ​​없습니다.

그게 무슨 뜻입니까? Google은 GCM을 사용할 필요가 없지만 항상이 문제에 대해 기기를 활성화합니다. 괜찮습니까? 난 그냥 VoiP 응용 프로그램에서 수면 상태에서 동작을 듣고, 올바른 방법입니다 알고 싶어요!

감사!

항상 백그라운드에서 실행되는 service를 만들고 거기에서 당신의 sipstack을 실행

답변

1

솔루션 항상 들어오는 메시지를 수신 할 수 있도록이 (가) 다음이다.

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(); 
     } 
    }    
} 
를 장치가 유휴 상태로 전환 될 때 와이파이 전원을 끄도록 구성 할 수 있기 때문에

는 와이파이 잠금
관련 문제