Android BroadcastReceiver помогите

215
13 декабря 2017, 22:51

У меня есть класс унаследованный от BroadcastReceiver, в нем создаются напоминания, так же у меня есть активити которое создает и сохраняет список времени от и до в виде строки, как мне сделать так что бы напоминания не срабатывали(откладывались) в эти промежутки времени? Проблема в том, что бы передать эту строку в класс BroadcastReceiver, т.к. приложение не активно, то надо загрузить эту сроку не из активности. Для сохранения использую SharedPreferences. Может использовать сериаллизацию? Но тогда куда сохранять фаил? и такое решение мне не очень нравится. В классе BroadcastReceiver пока не писал реализацию обработки нужной строки.

    public class Alarm extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    Intent notificationIntent = new Intent(context, MainActivity.class);
    PendingIntent contentIntent = PendingIntent.getActivity(context,
            0, notificationIntent,
            PendingIntent.FLAG_CANCEL_CURRENT);
    Resources res = context.getResources();
    Notification.Builder builder = new Notification.Builder(context);
    builder.setContentIntent(contentIntent)
            .setSmallIcon(R.drawable.u)
            // большая картинка
            .setLargeIcon(BitmapFactory.decodeResource(res, R.drawable.w))
            //.setTicker(res.getString(R.string.warning)) // текст в строке состояния
            .setTicker("Последнее китайское предупреждение!")
            .setWhen(System.currentTimeMillis())
            .setAutoCancel(true)
            .setDefaults(Notification.DEFAULT_ALL)
            //.setContentTitle(res.getString(R.string.notifytitle)) // Заголовок уведомления
            .setContentTitle("Напоминание")
            //.setContentText(res.getString(R.string.notifytext))
            .setContentText("У вас есть колоды требующие повторения."); // Текст уведомления
    // Notification notification = builder.getNotification(); // до API 16
    Notification notification = builder.build();
    NotificationManager notificationManager = (NotificationManager) context
            .getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(1, notification);

    ComponentName receiver = new ComponentName(context, Alarm.class);
    PackageManager pm = context.getPackageManager();
    pm.setComponentEnabledSetting(receiver,
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
            PackageManager.DONT_KILL_APP);
}
public void ssetAlarm(Context context, Date ddr, Date dateBl) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(ddr.getTime());
    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(context, Alarm.class);
    intent.putExtra(String.valueOf(dateBl.getTime()), String.valueOf(dateBl.getTime()));//Задаем параметр интента
    PendingIntent pi = PendingIntent.getBroadcast(context, (int) dateBl.getTime(), intent, 0);
    am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pi);
}

public void cancelAlarm(Context context,Date ddr) {
        Intent intent = new Intent(context, Alarm.class);
        PendingIntent sender = PendingIntent.getBroadcast(context, (int) 
        ddr.getTime(), intent, 0);
        //            AlarmManager alarmManager = (AlarmManager) 
        context.getSystemService(Context.ALARM_SERVICE);
        sender.cancel();
         //        if (alarmManager != null) {
        //            alarmManager.cancel(sender);
          //        }
          }
         }

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

     ComponentName receiver = new ComponentName(context, Alarm.class);
    PackageManager pm = context.getPackageManager();
    pm.setComponentEnabledSetting(receiver,
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
            PackageManager.DONT_KILL_APP);
READ ALSO
Как исправить ошибку с jQuery

Как исправить ошибку с jQuery

Пытался работать с jQuery но возникли вот эти ошибки

239
Вопрос о Slick слайдере?

Вопрос о Slick слайдере?

Подскажите, пожалуйста, как сделать, чтобы в Slick слайдере, при клике на любой слайд, в том числе и даже первый, делалось перелистывания сладейдеровПотому...

179
Laravel делает redirect после AJAX запроса

Laravel делает redirect после AJAX запроса

Всем привет, работаю на фреймворке Laravel 55

214
AdBlock блокирует GTM - Google Tag Manager

AdBlock блокирует GTM - Google Tag Manager

Есть проблема с блокировкой Google Tag Manager плагинами adguard и adblock plus в Chrome на сайте https://subexample

201