16

こんにちは、私は現在 AlarmManager を使用しています。以下のコードを書きました。コードによると、AlarmManager は 10 秒後にトリガーされる必要がありますが、私のコードではアラーム マネージャーがすぐにトリガーされます。助けてください。

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
        int alarmType = AlarmManager.ELAPSED_REALTIME_WAKEUP;
        long timeOrLengthofWait = 10000;
        Intent intentToFire = new Intent(this, AlarmReciever.class);
        PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, intentToFire, 0);
        alarmManager.set(alarmType, timeOrLengthofWait, alarmIntent);
    }
}

そして私のAlarmReceiverクラス

public class AlarmReciever extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {

        String phoneNumberReciever="5556";
        String message="Alarm Triggered";
        SmsManager sms = SmsManager.getDefault(); 
        sms.sendTextMessage(phoneNumberReciever, null, message, null, null);
        Toast.makeText(context," A message has been sent", Toast.LENGTH_LONG).show();

        Log.d("Alarm ", "Alarm Has been triggered and sms send");
    }
}

マニフェストに必要なアクセス許可を既に追加しています。

4

2 に答える 2

22

のアラーム タイプを使用していELAPSED_REALTIME_WAKEUPます。つまり、 の 2 番目のパラメーターはset()、現在からのミリ秒数でなければなりません。ここで、現在は として表されSystemClock.elapsedRealtime()ます。

呼び出しを行ってから 10000 ミリ秒後にこれを発生させることが目標である場合set()、そのset()呼び出しは次のようになります。

alarmManager.set(alarmType, SystemClock.elapsedRealtime()+timeOrLengthofWait, alarmIntent);
于 2013-07-19T21:15:40.380 に答える
14

過去のアラームの PendingIntent を作成している場合は、すぐに起動されます。例 - 今日の午前 8 時にアラームをスケジュールしますが、午前 11 時頃にコードを実行するとすぐに起動します。

解決:

cal.add(Calendar.DATE, 1);

long delay = 24 * 60 * 60 * 1000;
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), delay,pendingIntent);` 

これにより、翌日の指定された時刻 (午前 8 時) にイベントが発生します。

于 2014-07-04T12:42:55.627 に答える