Android Alarm Manager с широковещательным приемником, зарегистрированным в коде, а не в манифесте - PullRequest
12 голосов
/ 10 августа 2010

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

Я могу использовать этот метод для запуска другого действия, но я не могу использовать его для запуска метода в моем основном упражнении?

( как я могу уведомить о текущем действии от широковещательного приемника? )

Итак, я пытался зарегистрировать свой вещательный приемник в своей основной деятельности, как объяснено в ответе выше.

private BroadcastReceiver receiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "hello", Toast.LENGTH_SHORT).show();
        uploadDB();         
    }
};    

public void onResume() {
    super.onResume();

    IntentFilter filter = new IntentFilter();
    filter.addAction(null);

    this.registerReceiver(this.receiver, filter);
}

public void onPause() {
    super.onPause();

    this.unregisterReceiver(this.receiver);
}

Однако мне не удалось заставить это работать с диспетчером аварий, я не уверен, как мне следует связать намерение сигнализации с приемником вещания. Может ли кто-нибудь указать мне на пример динамической регистрации приемника вещания менеджера аварийных сигналов в действии? Или объясните, как бы я это сделал?

Ответы [ 2 ]

18 голосов
/ 15 августа 2011

Как насчет этого?

Intent startIntent = new Intent("WhatEverYouWant");
PendingIntent startPIntent = PendingIntent.getBroadcast(context, 0, startIntent, 0);
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarm.set(AlarmManager.RTC_WAKEUP, triggerTime, startPIntent);

А затем в вашем Manifest.xml файле:

<receiver android:name="com.package.YourOnReceiver">
   <intent-filter>
       <action android:name="WhatEverYouWant" />
   </intent-filter>
</receiver>

Итак, насколько я знаю, вы все равно должны объявить получателя в Манифесте. Я не уверен, что вы можете установить его для частного экземпляра в вашей деятельности. Вы можете объявить onReceive внутри своей деятельности и вызвать его (если у BroadcastReceiver есть интерфейс. Я не знаю, есть ли у него.)

1 голос
/ 16 августа 2012

Начать намерение тревоги, откуда вы хотите начать тревогу.напишите ниже код, с которого вы хотите начать прослушивание будильника

Intent myIntent = new Intent(getBaseContext(), **AlarmReceiver**.class);
                PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 0, myIntent, 0);
                AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
                Calendar calendar = Calendar.getInstance();
                calendar.setTimeInMillis(System.currentTimeMillis());
                calendar.add(Calendar.MINUTE, shpref.getInt("timeoutint", 30));
                alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

и в широковещательном приемнике напишите код, который хотите получить.А в Манифест напишите ниже

<receiver android:name=".AlarmReceiver" android:process=":remote"/>

Вы также можете поставить повторяющиеся тревоги также.Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...