私は1,510分ごとに位置更新を送信する必要があるアプリケーションを作成しようとしています。アラームマネージャーが時間通りに起動しない
アプリが実行されている場合、それは正確に動作しますが、それは背景/スリープモードに移行するときそれが正確に動作しません。
私は両方の方法を試みましたsetRepeating/setInExactRepeating
しかし、どれもバックグラウンドモードでは動作しません。
public static void startSensorAlaram(Context ctx, long minutes) {
AlarmManager alarmManager = (AlarmManager) ctx
.getSystemService(Context.ALARM_SERVICE);
// Alarm_Receiver is a broadcast receiver.
Intent intent = new Intent(ctx, Alaram_Receiver.class);
intent.setAction(Utility.SENSOR_ACTION);
PendingIntent pi = PendingIntent.getBroadcast(ctx, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),minutes,pi);
// alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), minutes, pi);
}
public static void stopAlaramSensor(Context ctx) {
Intent intent = new Intent(ctx, Alaram_Receiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(ctx, 1,
intent, 0);
AlarmManager alarmManager = (AlarmManager) ctx
.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
}
Alarm Receiver - Broadcast receiver
public class Alaram_Receiver extends WakefulBroadcastReceiver {
private SharedPreferences sp;
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
sp = context.getSharedPreferences(Utility.SHARED_PREFS, 0);
if (intent.getAction().equalsIgnoreCase(Utility.SENSOR_ACTION)) {
if (sp.getBoolean("logged_in", false)) {
// context.startService(new Intent(context,SensorService.class));
startWakefulService(context,new Intent(context,SensorService.class));
} else
Utility.stopAlaramSensor(context);
}
}
}
Note:-
分のAPIのバージョンは15で、バージョンをコンパイルする2つの問題があります。23
どのバージョンテストデバイス上で実行されているここで入手できますか? – nuuneoi
これはアンドロイド5.1と6.0です@nuuneoi – moDev
['AlarmManager'](http://developer.android.com/reference/android/app/AlarmManager.html)のドキュメントを参照してください。 KitKatの 'targetSdkVersion'> = 19の場合、' setRepeating() 'は不正確です。あなたは 'setExact()'を使う必要があり、起動するたびに必要な間隔でアラームを再設定する必要があります。 –