Проблема с уведомлением через широковещательный приемник и rxJava2 - PullRequest
0 голосов
/ 04 ноября 2018

У меня проблема с уведомлением в приемнике вещания.

Вот класс:

public class JokeAlarmReceiver extends BroadcastReceiver {

CompositeDisposable compositeDisposable = new CompositeDisposable();

public static final String NOTIFICATION_CHANNEL_ID = "Channel Joke ID";
public static final String NOTIFICATION_CHANNEL_NAME = "Channel";
public static final int NOTIFICATION_ID = 123;

@Inject
DataManager dataManager;


@Override
public void onReceive(Context context, Intent intent) {
    ((JokeApplication)context.getApplicationContext()).getAppComponent()
            .plus(new JokeAlarmReceiverModule(context))
            .inject(this);


    getJokesToNotification();
    createNotification(context);

}

public void createNotification(Context context) {

        final NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID)
                .setSmallIcon(R.drawable.ic_mood_black_24dp)
                .setContentTitle("Smile Reminder :)")
                .setContentText(dataManager.getJokeForNotification())
                .setStyle(new NotificationCompat.BigTextStyle())
                .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                .setAutoCancel(true);


        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel(
                    NOTIFICATION_CHANNEL_ID,
                    NOTIFICATION_CHANNEL_NAME,
                    NotificationManager.IMPORTANCE_DEFAULT);

            NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
            if (notificationManager != null) {
                notificationManager.createNotificationChannel(channel);
            }
        }

        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
        notificationManager.notify(NOTIFICATION_ID, mBuilder.build());


    }



public void getJokesToNotification(){

    compositeDisposable.add(dataManager.getJokes()
           .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(
                    randomJokes -> {
                        // onNext
                            dataManager.setJokeForNotification(randomJokes.getSetup(),randomJokes.getPunchline());
                        Log.d("WORKING","1st");
                        },
                    throwable -> {
                        // onError
                    },
                    () -> {
                        // onCompleted
                    })
    );
}

Короче говоря, как это работает ... Я использовал метод с помощью rxjava для вызова API, который должен дать мне объект RandomJoke, из которого я использовал 2 части с текстом. Вставляю dataManager в который я сохраняю текст. Затем я использую этот текст в качестве текста для уведомления. Я хочу, чтобы уведомление появлялось снова, даже когда мое приложение закрыто. Проблема в том, что все работает нормально, когда приложение все еще работает, но когда я закрываю его ... Уведомление кулака получает нулевое значение вместо текста, а второе и остальные уведомления работают нормально. Может кто-нибудь сказать, что я делаю не так? Трансляция регистрируется через манифест, и я тестирую все на эмуляторе с API 25

...