Как включать BroadcastReceiver, возобновив?

я объясняю им мою проблему, создал приложение, которое должно бросать извещение каждый день в конкретный час. Для этого я разработал следующий код:

Intent intent  = new Intent(this, Alertas.class);
PendingIntent pIntent = PendingIntent.getBroadcast(this, 1, intent,  PendingIntent.FLAG_CANCEL_CURRENT);

Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(System.currentTimeMillis());
cal.set (Calendar.HOUR_OF_DAY, Integer.valueOf(hora[0]));
cal.set(Calendar.MINUTE, Integer.valueOf(hora[1]));
cal.set(Calendar.SECOND, 0);

AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pIntent);

Где Ты Предупреждаешь, это BroadcastReceiver, где работает следующий сжатый код:

                NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(context)
                        .setSmallIcon(R.mipmap.ic_launcher)
                        .setContentTitle(farmacia.getNombre())
                        .setContentText(farmacia.getDireccion())
                        .setLights(Color.CYAN, 1000, 500)
                        .setVibrate(new long[]{1000, 500, 2000, 500, 1000});

        Intent resultIntent = new Intent(context, Inicio.class);

        TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
        stackBuilder.addParentStack(Inicio.class);
        stackBuilder.addNextIntent(resultIntent);
        PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

        mBuilder.setContentIntent(resultPendingIntent);

        NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(1, mBuilder.build());

Когда я делаю доказательства в участнике соревнования, меняя дату вручную функционируй правильно, в физическом устройстве также, но когда возобновило устройство вышеупомянутую бдительность, ты прекращаешь быть сообщенным в указанный час, прямо он не появляется, только это делает первый раз, когда я включаю бдительность, я надеюсь, что они могут помогать мне, - для моего конечного проекта, большое спасибо!

1
задан 23.06.2016, 08:45
3 ответа

Помни, что ты это должен регистрировать BroadcastReceiver, регулярно реализуют в mГ©todo onResume():

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

  // Registra el broadcast receiver para recibir mensajes.
  LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
      new IntentFilter("mi-evento"));
}

и очень важно дай регистрировать это, ты это можешь делать в mГ©todo onPause():

    @Override    
    protected void onPause() {
      // Desregistrar cuando la actividad no es visible!.
      LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
      super.onPause();
    } 
1
ответ дан 24.11.2019, 14:20
  • 1
    Во-первых спасибо за отвечание @Elenasys, прости мое неведение, но что ты выдвигаешь меня; и #191; Инициализироваться и # 237; в BroadcastReceiver и останавливать это и # 237; в каждый раз, когда aplicaci и # 243; n она была активной или нет? Функциональность, которую я хочу осуществить, состоит в том, чтобы BroadcastReceiver был включен, когда я нажимаю переключатель, и остался включенным до тех пор, пока вышеупомянутый переключатель не изменится в дезактивированный, что вышеупомянутая функциональность уже делает ее, проблема приходит, когда я возобновляю м и # 243; подлый, что прекращает бросать извещения, которые они появляются в c и # 243; я говорю, что я присоединил. – Antonio de los 20.05.2016, 11:38

AГ±ade следующий linean в <manifest>

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
1
ответ дан 24.11.2019, 14:20
  • 1
    Во-первых спасибо за отвечание @aldakur, но вышеупомянутый ответ не решает проблему. – Antonio de los 23.05.2016, 19:18
  • 2
    Спасибо за отвечание @aldakur, но в и # 241; ado это разрешение в manifest, и когда я возобновляю, они остаются так, что тревоги не включаются. Я надеюсь, что ты можешь помогать мне, спасибо! – Antonio de los 26.05.2016, 16:35

Давно я виделся с проблемой, сходной с твоим. Я объясняю тебе как это solucionГ© я.

Сначала, отдели твой BroadCastReceiver в классе в часть.

public class MusicBroadcastReceiver extends BroadcastReceiver {

    static MainActivity mainVar = null; // Esta será la referencia a la clase del MainActivity

    public MusicBroadcastReceiver() {}

    @Override
    public void onReceive(Context context, Intent intent) {


    }

    public static void setMainActivityHandler(MainActivity main){
        mainVar = main;
    }

}

DespuГ©s instanciala в Main тебя aplicaciГіn. В моем случае, мой объект назывались MusicBroadcastReceiver.

BroadcastReceiver broadcastReceiver = new MusicBroadcastReceiver();
        MusicBroadcastReceiver.setMainActivityHandler(this);    // Le pasamos este activity para vincularlos
        IntentFilter callInterceptorIntentFilter = new IntentFilter("android.intent.action.ANY_ACTION");
        registerReceiver(broadcastReceiver, callInterceptorIntentFilter);

Секунда, объявляет BroadcastReceiver в твоем manifest.

<receiver
    android:name=".MusicReceiver.MusicBroadcastReceiver"
    android:exported="true" >
    <intent-filter>
        <action android:name="com.android.music.metachanged" />
        <action android:name="com.htc.music.metachanged" />
        <action android:name="fm.last.android.metachanged" />
        <action android:name="com.sec.android.app.music.metachanged" />
        <action android:name="com.nullsoft.winamp.metachanged" />
        <action android:name="com.amazon.mp3.metachanged" />
        <action android:name="com.miui.player.metachanged" />
        <action android:name="com.rhapsody.metachanged" />
        <action android:name="com.real.IMP.metachanged" />
        <action android:name="com.maxmpz.audioplayer.metachanged" />
        <action android:name="com.sonyericsson.music.metachanged" />
        <action android:name="com.rdio.android.metachanged" />
        <action android:name="com.samsung.sec.android.MusicPlayer.metachanged" />
        <action android:name="com.andrew.apollo.metachanged" />
        <action android:name="com.spotify.mobile.android.metadatachanged" />
        <action android:name="com.spotify.music.metadatachanged" />
    </intent-filter>
</receiver>

у Тебя Есть пример в моем хранилище:

https://github.com/helicida/FeatherLyrics_APP

Надеялся, что он подает тебя.

0
ответ дан 24.11.2019, 14:20
  • 1
    Привет @Sergi каков Barjola - метод registerReceiver (.); и что стоимость проходит с intenet Filter, package или которым? – Jhon Jesus 23.03.2019, 03:54