2017-02-15 3 views
7

전경 서비스를 사용하여 실시간 위치 추적 응용 프로그램 및 현재 위치를 서버로 업데이트 중입니다.

이제는 기기가 깊은 잠에있을 때 앱을 계속 활성화 할 수 있습니다. 하지만 Doze 모드에서 네트워크 액세스가 일시 중지되어 서버에서 업데이트 할 수 없습니다.
Google 개발자 가이드 제안에 따라 우선 순위가 높은 FCM 메시지를 사용하여이 문제를 해결할 수 있습니다. 내 경우에는 네트워크 액세스가 일시 중지 된 동안 서버에 알림을 보내는 방법 (OS 또는 수동으로 인터넷 액세스 사용 안 함을 식별해야 함).도스 모드에서 인터넷을 지속적으로 사용하는 방법 Marshmallow and Nougat

+0

해결책을 찾았습니까? – nAkhmedov

+0

아직,하지만 여전히 적절한 대체 솔루션을 찾고 있습니다. –

+0

발견되면 알려 주시기 바랍니다. 미리 감사드립니다. – nAkhmedov

답변

0

시도 확인 NetworkInfo 상태

public static boolean isNetBlocked(Context context) { 
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = cm.getActiveNetworkInfo(); 

    return networkInfo != null && networkInfo.getDetailedState().name().equals(NetworkInfo.DetailedState.BLOCKED.name()); 
} 
+0

에서 더 이상 작동하지 않습니다. 장치가 세이버 _Battery 일 때'Blocked '를 반환하고 _Restrict 백그라운드 데이터 _ 모드 – nAkhmedov

+0

인터넷이 OS 또는 수동으로 비활성화 된 경우 두 조건 "networkInfo"에서 모두 null을 반환합니다. –

0

한 가지 방법은 디바이스 모드를 변경 한 후 디바이스를 알아낼 것이다 일단이 방송 할 액션 -

"android.os.action.DEVICE_IDLE_MODE_CHANGED" 

등록 인 도즈에/비이고 사용 중지 :

PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); 

boolean isDeviceIdle = pm.isDeviceIdleMode();