Отправить ArrayList <String>из BroadCastReceiver в активность - PullRequest
0 голосов
/ 12 марта 2012

Сценарий:

  • У меня запланирован запуск тревоги на указанное количество времени.Каждый раз, когда выполняется мой BroadCastReceiver срабатывает.

  • В BroadCastReceiver я делаю все виды проверок, и в конце получается ArrayList простых строк

  • Я отображаю Уведомление в строке состояния

  • Когда пользователь нажимает на уведомление, я отображаю активность.Мне нужно в своем Activity, ArrayList для отображения его на представлениях.

Вот пример кода:

public class ReceiverAlarm extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
         ArrayList<String> notifications = new ArrayList<String>();

         //do the checks, for exemplification I add these values
         notifications.add("This is very important");
         notifications.add("This is not so important");
         notifications.add("This is way too mimportant");

         NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
         //init some values from notificationManager
         Intent intentNotif = new Intent(context, NotificationViewer.class);
         PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intentNotif, 0);

         Notification notification = new Notification(icon, text, when);
         notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
         notificationManager.notify(NOTIFICATION_ID, notification);
    }

И

   public class NotificationViewer extends Activity {


            @Override
            protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.notification_viewer);

                   //HERE I NEED the ArrayList<String> notifications
    }

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

Ответы [ 3 ]

1 голос
/ 12 марта 2012

Согласно ответу, помеченному как решение ЗДЕСЬ , если вы не укажете действие для вашего ожидающего намерения, дополнительные материалы не будут распространяться

1 голос
/ 12 марта 2012

Согласно моему предложению, вы можете быстро получить его двумя способами:

  1. Создайте свой собственный класс, который реализует Percelable, и спроектируйте свою собственную реализацию для объекта записи и чтения.
  2. Используйте Gson, чтобы сериализовать объект в одну строку json, обернуть его внутри намерения, получить его на другом конце и десериализовать строку Json обратно в нужный тип объекта

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

0 голосов
/ 13 марта 2012

Основываясь на всех комментариях, рабочее решение таково:

на BroadCastReceiver

Intent intentNotif = new Intent(context, NotificationViewer.class);
intentNotif.putStringArrayListExtra("list", notifications);

на занятии

Bundle b = getIntent().getExtras();
if (b != null) {
    testArrayList= b.getStringArrayList("list");
}

Кажется, это работает очень хорошо.

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