TimerTask Android Bluetooth - PullRequest
       12

TimerTask Android Bluetooth

0 голосов
/ 10 июля 2011

Я внедряю Службу, которая запускается при загрузке Android, и она должна сканировать каждые 10 минут на наличие устройств Bluetooth поблизости.Когда он обнаруживает устройства, он делает некоторую работу.Кроме того, это периодическое сканирование должно происходить все время, пока устройство включено.Я пытаюсь запланировать TimerTask, но я не понимаю, как его использовать.Я предполагаю, что он должен запустить этот сервис и позволить сервису выполнять работу вместо написания кода в методе запуска TimerTask?Как бы я запустил сервис из TimerTask, поскольку это кажется самым простым способом решения моей проблемы, но TimerTask является частью java.util, а не одним из классов Android.

Я только что обнаружил Android AlarmManager.Должен ли я использовать это?Может ли он запустить службу?


Пока у меня есть это, но мне нужна помощь:

class Timer extends Service
{
    private Handler myHander;</p>

<pre><code>Runnable r = new Runnable()
{
    run()
    {
        startService(new Intent(Timer.this.getApplicationContext() ,MyService.class));
</code>

myHandler.postDelayed (r, 10 минут);}}

onCreate()
{   
    myHandler=new MyHandler();

}   

onStartCommand()
{
    //Do the bluetooth work.

r.run ();}

onDestroy() { super.onDestroy(); myHandler.removeCallback(r); }

} класс MyService расширяет службу {}

Извините, я не понимаю, как здесь работает форматирование.

Нужно ли переопределить onDestroy () в Сервисе?Где я могу использовать stopService ()?

1 Ответ

0 голосов
/ 10 июля 2011

Вам необходимо:

  1. Написать службу, которая будет запущена после одного из ваших действий и / или после загрузки устройства.
  2. В вашем сервисе в onStart / onStartCommand вам нужно запланировать, используя Handler или AlaramManager периодические обновления.

Разница между Handler и AlarmManager в этом случае будет такова: Handler не будет работатькогда устройство находится в состоянии глубокого сна, в то время как вы можете настроить AlaramManager для пробуждения устройства и запуска своего кода.

Я бы порекомендовал перейти с Handler, так как это проще и потому что вы сказали, что тольконеобходимо запустить ваш код, когда устройство не работает.

И еще одна вещь, Handler не использует дополнительный поток, в то время как TimerTask.И это считается плохой практикой для Android - тратить на нити только для таймера.

Пример кода для повторения задачи с использованием Handler можно найти здесь: Повторять задачу с задержкой по времени.

...