0

Android で 1 時間ごとに場所を取得したい。そのために、私はアラームマネージャーを使用し、1時間ごとに繰り返しアラームを設定し、修正時間後、つまり午前8時と午後12時にファイルに書き込みたいだけです。アラームマネージャーの設定に問題がありましたが、1時間ごとに設定しましたが、1/2時間で実行されました。

on button click i start service :

       serviceButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            Intent myIntent = new Intent(AutoMainActivity.this, TrackerService.class);

            pendingIntent = PendingIntent.getService(AutoMainActivity.this, 0, myIntent, 0);

            AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
            alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, ALARM_TRIGGER_AT_TIME,
                    3600000, pendingIntent);

            //3600000 1hrs

            finish();
        }
    });

サービスクラスは次のとおりです。

Tracker Service.class

String FINAL_STRING;
SharedPreferences pref;
static final int START_TIME = 8;
static final int MID_TIME = 12;

    java.util.Date systemDates = Calendar.getInstance().getTime(); 
    int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);

    if(hour == START_TIME)
        {
            edit.putString("smsdata", FINAL_STRING);
            edit.commit();

            //sendSms(START_TAG+pref.getString("smsdata", ""));
            edit.putString("smsdata", "");
            edit.commit();
        }else {

            System.out.println("currentdate:"+simpleDateFormat.toString());
            System.out.println("current_time:"+currentTime);

            Editor edit = pref.edit();
            edit.putString("smsdata", pref.getString("smsdata", "")+FINAL_STRING+"#");
            edit.commit();

            if(hour==MID_TIME)
            {
                //sendSms(START_TAG+pref.getString("smsdata", ""));
                generateNoteOnSD("\n"+START_TAG+pref.getString("smsdata", ""));
                edit.putString("smsdata", "");
                edit.commit();
                System.out.println("mid time");

            }

        }

これを実行すると、30分ごとにサービスが開始されます。しかし、私は60分ごとに欲しいです。

4

2 に答える 2

1

INTERVAL_HOURまず、のような利用可能な定数の 1 つを実際に使用する必要がありますsetInexactRepeating()

第二に、不正確setInexactRepeating()です。Android は、イベントをスケジュールされた他の不正確なアラームと合体させるために、アラームの時間を変更する権利を留保します。

ということで、ちょっとだけ に切り替えてみてくださいsetRepeating()。期待どおりに動作するようになった場合、その動作は の「不正確」な性質によるものですsetInexactRepeating()

adb shell dumpsys alarmまた、スケジュールされたアラームを調べるために使用することもできます。2 つのアラームがスケジュールされていて、それぞれが 1 時間に 1 回鳴っている場合があります。

于 2013-05-09T11:34:51.790 に答える