Android информация уведомления не находится в java классе ArrayList - PullRequest
0 голосов
/ 19 апреля 2020

Я создаю приложение, которое «ловит» все уведомления в течение определенного периода времени, а затем отображает их все одновременно. Однако у меня возникла проблема с моим классом NotificationListenerService Java.

В настоящее время я могу "поймать" уведомления, когда они приходят, и не отображать их. Я также могу сохранить информацию уведомления в ArrayLists (как вы можете видеть в методе onNotificationPosted). Однако, когда я пытаюсь использовать один из методов получения ArrayList для переноса информации в другой класс, ArrayList полностью пуст. Любые мысли о том, почему это так и почему я не могу получить эту информацию в другом Java классе?

NotificationListenerService Class

public class NotificationListenerServiceUsage extends NotificationListenerService {
    private static final String TAG = "NotificationListenerSer";
    ArrayList<Integer> idMap = new ArrayList<>();
    ArrayList<Notification> notificationMap = new ArrayList<>();

    @Override
    public IBinder onBind(Intent intent) {
        Log.d(TAG, "onBind: ");
        return super.onBind(intent);
    }

    @Override
    public void onNotificationPosted(StatusBarNotification sbn){
        Integer notificationInt = sbn.getId();
        Notification notificationContent = sbn.getNotification();
        idMap.add(notificationInt);
        notificationMap.add(notificationContent);

        cancelAllNotifications();
    }

    @Override
    public void onNotificationRemoved(StatusBarNotification sbn){

    }

    public ArrayList<Integer> getIdMap() {
        return idMap;
    }

    public ArrayList<Notification> getNotificationMap() {
        return notificationMap;
    }
}

Реализация Класс

public class Batch_Notifications extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

     public void getHeldNotifications(View view){
        NotificationListenerServiceUsage noteListenerService = new NotificationListenerServiceUsage();
        ArrayList<Integer> idMap = noteListenerService.getIdMap();
        ArrayList<Notification> notificationMap = noteListenerService.getNotificationMap();
        Log.d(TAG, "getHeldNotifications: " + idMap + notificationMap);
    }
}


1 Ответ

0 голосов
/ 19 апреля 2020

Вы не можете сохранить данные в оперативной памяти. Ваш NotificationListenerService не всегда будет работать, он разрушит, а затем снова будет создан, и теперь все ваши свойства будут повторно инициализированы.

Лучший способ выполнить задачу такого типа - сохранить данные в постоянном хранилище, то есть в базе данных. А при попытке отправить пакетное уведомление вы получаете из базы данных. Вы можете использовать базу данных Sqlite с Android -Room для легкой имплантации.

Посмотрите на https://developer.android.com/training/data-storage.

...