2015-03-26 2 views
1

Работа в VisualStudio с Xamarin и только < 2 недели опыта работы с Android.Android AlarmManager Alarm для запуска службы

У меня есть класс IntentService, который я хочу использовать для запуска будильника. Эта красота IntentService работает на потоке, и она прекратится, когда она закончит работу. Я не понимаю, как реализовать аварийный сигнал с помощью AlarmManager. Я следую This Tutorial и используя пример ELAPSED_REALTIME_WAKEUP.

Этот код находится в MainActivity под OnCreate()

 AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(this, startTrackingService()); 


    alarmMgr.SetInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,    
    trackingSetting, 
    trackingSetting, intent); 


    public void startTrackingService() { 
    Intent i = new Intent(this, StoreLocationService.class); // 
    StartService(i); 
     } 

Сейчас я получаю следующие ошибки:

  • должны иметь тип возвращаемого

    StartService(i); 
    
  • Идентификатор ожидается; класс это ключевое слово

    Intent i = new Intent(this.StoreLocationService.class); 
    

Я надеюсь, что кто-то может увидеть явные ошибки. Я надеюсь, что у меня есть правильная идея с Alarm в MainActivity, которая использует StartService (Intent Service) для запуска службы.


Дополнительный вопрос: Служба Я хочу начать делает один единовременное событие отслеживания местоположения. Хотя я хочу, чтобы таймер/будильник работал, пока экран отключен для этого отслеживания, я думаю, что поэтому я не могу полагаться на основное действие. Неправильно или правильно?

У меня есть вторая услуга, которую я сделаю позже. Он синхронизирует эти данные в локальной базе данных

+0

Вы проверили значение trackingsetting. – Keshav1234

+0

Да, он инициализирован до нуля –

+0

, если он инициализирован нолем, как вы получите сигнал тревоги? – Keshav1234

ответ

1

Edit: Ok, после прочтения на Xamarin, это выглядит, как это могло бы помочь для Identifier expected; class is a keyword ошибки:

StartService(new Intent(this, typeof(StoreLocationService))); 

Ссылки:

Xamarin android SendBroadcast from IntentService not received by Activity

http://developer.xamarin.com/guides/android/application_fundamentals/backgrounding/part_2_android_services/

Редактировать 2: Я также заметил, что есть некоторые отличия от Xamarin с AlarmManagers getSystemService должны быть GetSystemService, а также похоже, что вам нужен PendingIntent (это необходимо для AlarmManager в Java).

Общий пример:

Intent i = new Intent(this, typeof(StoreLocationService)); 
PendingIntent pintent = PendingIntent.GetService(this, 0, i, 0); 
AlarmManager alarmMgr = (AlarmManager) this.GetSystemService(Context.AlarmService); 
alarmMgr.SetInexactRepeating(AlarmType.RtcWakeup, trackingSetting, trackingSetting, pintent); 

Смотрите этот пост: https://forums.xamarin.com/discussion/16111/setting-alarmmanager-to-repeat-given-a-specific-time

И этот пост: http://forums.xamarin.com/discussion/7490/alarm-manager

+0

Одна вещь, которую я вижу, это то, что вы никогда не делали Android на C#! Как ни странно, есть некоторые незначительные отличия! Я очень ценю ваш ответ tho Daniel –

+0

О нет! Извини за это. Позвольте мне вернуться к чертежной доске! –

+1

Спасибо человеку. Я вернулся к документации для PendingIntent и увидел GetService(). Большое вам спасибо за то, что вы сделали общий пример и провели некоторое исследование со мной. Я знаю, что я не мог бы сделать это без тебя, и я очень благодарен. Я все еще не уверен, как PendingIntent использует Intent в качестве третьего параметра и как сигнал тревоги использует параметр pintent, чтобы в конечном итоге получить Intent of StoreLocationService. –

Смежные вопросы