2

Boot CompletedでAndroidで午前9時のアラームを開始しました。ただし、起動が完了すると、毎分アラームが発生します。

私の要件は、起動後にアラームを設定する必要がありますが、アラームは午前 9:00 にのみ発生することです。

ここに私のコードがあります: public class AlarmUtil { private PendingIntent alarmIntent;

public static void setAlarm(Context context) {

    AlarmManager alarmManager = (AlarmManager) context
            .getSystemService(Context.ALARM_SERVICE);

    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, 9);
    calendar.set(Calendar.MINUTE, 00);
    calendar.set(Calendar.SECOND, 00);
    calendar.set(Calendar.AM_PM, Calendar.AM);
    //calendar.setTimeInMillis(calendar.getTimeInMillis());
    calendar.add(Calendar.SECOND, 1);

    Intent intent = new Intent(context, Services.class);
    PendingIntent pintent = PendingIntent.getService(context, 123456789,
            intent, 0);

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
            calendar.getTimeInMillis(), 1 * 60 * 1000, pintent);

}
}

public class AlarmBroadcastReciever extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
        Toast.makeText(context, "Booted!", Toast.LENGTH_SHORT).show();
        AlarmUtil.setAlarm(context);

    }
}
}

services (マイ サービス クラス)

public class Services extends IntentService {

public Services(String name) {
    super("services");
    // TODO Auto-generated constructor stub
}

public Services() {
    super("services");
    // TODO Auto-generated constructor stub
}

@Override
public void onCreate() {
    super.onCreate();

}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    MyApp.counter += 1;

    Toast.makeText(getApplicationContext(),
            "Service started: " + MyApp.counter, Toast.LENGTH_LONG).show();
    return START_STICKY;
}

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
protected void onHandleIntent(Intent intent) {
    Toast.makeText(getApplicationContext(), "handling intent",
            Toast.LENGTH_LONG).show();

}

}

私に欠けているところ。私を助けてください。前もって感謝します。

4

3 に答える 3

5
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
        calendar.getTimeInMillis(), 1 * 60 * 1000, pintent);

を呼び出すことsetRepeating()で、毎分インテントを起動するように指示しています。おそらくset()orsetExact()代わりに使用するつもりでした。

さらに、現在の日付の9:00 にアラームを設定しています。あなたの目的が正確にはわかりませんが、「次の9:00」のアラームが必要な場合(つまり、目覚まし時計として)、現在の時刻が9:00を超える場合は、おそらく1日追加する必要があります. ドキュメントから:

指定されたトリガー時間が過去の場合、アラームはすぐにトリガーされます。

編集:毎日 9:00にこのアラームを起動する必要がある場合setRepeating()は正しいですが、ミリ秒単位の時間はAlarmManager.INTERVAL_DAY. ただし、過去のアラームに関するメモには注意してください。たとえば、午前 10 時に電話を起動し、現在のコードを使用すると、将来のコードに加えて即時のアラームが表示されます。

そして、@DerGolem が指摘したように、API レベル 19 をターゲットにすると、これらのアラームは不正確になります (そして はありませんsetRepeatingExact())。正確なアラームが必要な場合は、1 つを でスケジュールしsetExact()、次にそのアラームが発生したときに次のアラームをスケジュールする必要があります。

于 2014-06-19T07:09:44.660 に答える
1

毎日設定するには、「1 * 60 * 1000」を AlarmManager.INTERVAL_DAY に置き換える必要があります

于 2014-06-19T07:37:35.447 に答える