0

5分ごとに位置データをチェックしています。これを 5 分ごとに呼び出されるサービスに実装しました。主なアクティビティには、アラームを開始/停止するための 2 つのボタンがあります。これは、ロックを実装するのに最適な場所ですか..

 startService.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            // add a notification when the BG service is started..

            Intent myIntent = new Intent(ContextActivity.this, MyAlarmService.class);
            pendingIntent = PendingIntent.getService(ContextActivity.this, 0, myIntent, 0);

                        AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);

                        Calendar calendar = Calendar.getInstance();
                        calendar.setTimeInMillis(System.currentTimeMillis());
                        calendar.add(Calendar.SECOND, 10);
                       // alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
                        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 5, pendingIntent);

               Toast.makeText(ContextActivity.this, "Start Alarm", Toast.LENGTH_LONG).show();
               System.out.println("Alarm started");
        }

    });

    stopService.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
               alarmManager.cancel(pendingIntent);

                        // Tell the user about what we did.
                        Toast.makeText(ContextActivity.this, "Cancel!", Toast.LENGTH_LONG).show();
                        System.out.println("Stop alarm");
        }
    });

スタートでロックを取得し、ストップでロックを解除してもよろしいでしょうか?

4

1 に答える 1

2

これにはウェイクロックは必要ありません。

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP...ドキュメントの状態として、すでに which を使用しています:

System.currentTimeMillis() のアラーム時間 (UTC の壁時計時間)。オフになったときにデバイスをウェイクアップします。

そのため、アラームは、起動時にデバイスをすでに目覚めさせます。デバイスがスリープ状態に戻る前にサービスの作業が完了しないと思われる場合は、サービス内でウェイクロックを取得し、作業が完了した後に解放する必要があります。

于 2012-08-19T04:34:19.967 に答える