Android Alarm Manager с вещательным приемником, зарегистрированным в коде, а не на манифесте

StackOverflow https://stackoverflow.com/questions/3447594

Вопрос

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

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

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

Поэтому я пытался зарегистрировать мою трансляцию приемника в мою основную деятельность, как объяснено в ответ выше.

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);
}

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

Это было полезно?

Решение

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

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>

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

Другие советы

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

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"/>

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top