2016-09-14 28 views
0

私はこのようなアラームマネージャAlarmManager +サービス(画面オフ)

と私のサービスを呼び出す:私は同じ方法でそれを再スケジュール私のServicePooling

alarmManage.setExact(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis() + getPoolingInterval(), pendingIntentPolling); 

を、そしてこのServicePooling私のサービスでデータを送信する別のサービスを呼び出します。

Intent serviceSocket = new Intent(this.context, SenderService.class); 
    this.context.startService(serviceSocket); 

は、すべてが非常によく、私は自分のサーバー上で受け取るすべてのminutポーリング通信を動作しますが、私のデバイスがオフし、この停止作業、USBがプラグインさせずに画面をしているとき。

答えて

1

Serviceを今日はAlarmManagerに使用することは悪い考えです。代わりにWakefulBroadcastReceiverを使用してください。デバイスがスリープ状態になり、電源がオフになります。

public class BRMine extends WakefulBroadcastReceiver { 
    public static final String INTENT_FILTER = "com.example.BRMine"; 
    @Override 
    public void onReceive(Context ctx, Intent intent) { 
     // TODO Auto-generated method stub 
     OWakeLocker.acquire(ctx, _.indexNOTS); 
     ComponentName comp = new ComponentName(ctx.getPackageName(), 
       SMine.class.getName()); 
     startWakefulService(ctx, intent.setComponent(comp)); 
    } 

} 

パブリッククラスOWakeLocker { プライベート静的PowerManager.WakeLock [] wakeLocks =新しいPowerManager.WakeLock; //サービスを開始する

@SuppressWarnings("deprecation") 
public static void acquire(Context ctx, int index) { 
    WakeLock wakeLock = wakeLocks[index]; 
    if (wakeLock != null) wakeLock.release(); 

    PowerManager pm = (PowerManager) ctx.getSystemService(Context.POWER_SERVICE); 
     wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | 
       PowerManager.ACQUIRE_CAUSES_WAKEUP | 
       PowerManager.ON_AFTER_RELEASE, _.APPNAME + Integer.toString(index)); 
    if (wakeLock != null && wakeLock.isHeld()){ 
     wakeLock.acquire(); 
    } 
} 

public static void release(int index) { 
    WakeLock wakeLock = wakeLocks[index]; 
    if (wakeLock != null) 
     wakeLock.release(); 
     wakeLock = null; 
}} 

を数える[_ indexNOTS_MAX。] :

Intent intent = new Intent(BRMine.INTENT_FILTER); 
PendingIntent pi = PendingIntent.getBroadcast(ctx, myintentalarm, intent, PendingIntent.FLAG_CANCEL_CURRENT): 
am.setExact(AlarmManager.RTC_WAKEUP, nexttime, pi); 
+0

このWakefulBroadcastReceiverで試してみましょう – rcorbellini

+0

同じ問題です、デバイスがアイドル状態のときに問題がsetExactにあると思います。 – rcorbellini

0

私はVyacheslav b私はあなたのアプリケーションがrunnningのときに私はちょうどこれが必要ですが、私のケースでは、アプリケーションのstartapplicationにtimertaskを使用しています(そして、setExactAndAllowWhileIdleを持っていません) 。

関連する問題