2017-02-15 15 views
7

私は、リアルタイムの位置追跡アプリケーションと、フォアグラウンドサービスを使用して現在の位置をサーバーに更新しています。

今、デバイスを深い眠りに置いている間、アプリをアクティブに保つことができます。しかし、ネットワークアクセスがDozeモードで中断されているため、サーバー上で更新できません。
Googleの開発者ガイドの提案によれば、優先度の高いFCMメッセージを使用してこの問題を解決できます。 私の場合は、ネットワークアクセスが中断されている間にプッシュ通知をサーバーに通知する方法(OSまたは手動でインターネットアクセスを無効にする必要があります)。ドーズモードでインターネットを継続的に使用する方法Marshmallow and Nougat

+0

解決策はありましたか? – nAkhmedov

+0

まだ、まだ私は適切な代替ソリューションを探しています。 –

+0

見つけたら、私に注意を促してください。あらかじめありがとう – nAkhmedov

答えて

0

一つの方法は、デバイスモードを変更し、デバイスが居眠り/非である把握します一度これが放送されますアクション(Action)

"android.os.action.DEVICE_IDLE_MODE_CHANGED" 

に登録され

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

で動作しません。デバイスがsaver_の_Batteryであり、_Restrictのバックグラウンドデータ_モード – nAkhmedov

+0

がOSによって、または手動で無効にされ、両方の条件 "networkInfo"がnullの場合、 'Blocked'を返します。 –

0

NetworkInfoの状態を確認してくださいドーズ:

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

boolean isDeviceIdle = pm.isDeviceIdleMode(); 
関連する問題