Notification action soll mit einem Intent daten an den Receiver übertragen.

  • Antworten:7
  • OffenNicht stickyNicht beantwortet
Gelöschter Account
  • Forum-Beiträge: 47

14.11.2016 19:09:54 via Website

Hallo, ich habe eine Notification mit einem Action button, wenn man diesen Klickt dann erhält ein Receiver den Intent und führt dann den entsprechenden code für den Klick aus. Nun ich würde gerne über diesen Action Button Daten übertragen, bzw den Titel und alle Informationen von der Notification. Nur irgendwie bekomme ich dann eine null pointer exception, und das ist nicht das was ich will. Gibt es irgendwie eine möglichkeit die Daten von einer Notification über diesen Action-Button an den Receiver zu übermitteln? Ansonsten funktioniert alles wie es soll.

Notification:

  private void makeNotificationErinnerung(Context context, String title, String details, String erstellt)
{
    Intent i = new Intent(context, MainActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, i, 0);

    Bundle startOnClickBundle = new Bundle();
    startOnClickBundle.putString(putExtraTitle, title);
    startOnClickBundle.putString(putExtraDetails, details);
    startOnClickBundle.putString(putExtraErstellt, erstellt);

    Intent startOnClick = new Intent(); //Mit diesem Intent würde ich gerne das Bundle übertragen.
    startOnClick.putExtras(startOnClickBundle);

    Log.i("SynchMen:", "Intent_set(title):" + title);

    startOnClick.setAction(intentActionCodeNotification);
    PendingIntent pendingIntentLetSleep = PendingIntent.getBroadcast(context, 0, startOnClick, 0);


    if(preferences.getSleep() != 1001 && preferences.getSleep() == 555)
    {

    }
    else
    {
        NotificationCompat.Action action = new NotificationCompat.Action.Builder(R.drawable.ic_noti_logo, preferences.getSleep()+"", pendingIntentLetSleep).build(); //Hier wird es anschließend verwendet.

        Notification noti = new NotificationCompat.Builder(this)
                .setTicker("Recall: " + title)
                .addAction(action)
                .setContentTitle(title)
                .setAutoCancel(true)
                .build();




        noti.flags = Notification.FLAG_AUTO_CANCEL;

        NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);

        Random random = new Random();
        int mr = random.nextInt(9999 - 1000) + 1000;
        notificationManager.notify(mr, noti);
    }




}

Broadcast Receiver:

  @Override
public void onReceive(Context context, Intent intent) {
    if(intent.getAction().equals(intentActionCodeNotification))
    {
        CLPreferences preferences = new CLPreferences(context);
        Bundle bundle = intent.getExtras(); // Hier will ich sie auslesen ... funktioniert aber leider nicht, kriege jedesmal eine NullPointerException.
        Log.i("onCLICK:", "Intent(Titel):" + bundle.getString(putExtraTitle));

    }
}
Gelöschter Account
  • Forum-Beiträge: 47

15.11.2016 14:03:16 via Website

Danke für Ihre Antwort, aber ja ich hab schon alles ausprobiert. Bekomme jedesmal den Wert null.

Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 9.319

15.11.2016 19:49:36 via App

Das wundert mich jetzt..
Mit einem workaround und zwischen speichern..

LG Pascal //It's not a bug, it's a feature. :) ;)

Ludy
  • Mod
  • Blogger
  • Forum-Beiträge: 6.782

15.11.2016 20:39:07 via Website

Hallo,

ich weiß nicht wo du den Code her hast, aber ein paar Fehler waren drin.

private void makeNotificationErinnerung(Context mContext, String title, String details, String erstellt) {
    Bundle startOnClickBundle = new Bundle();
    startOnClickBundle.putString(putExtraTitle, title);
    startOnClickBundle.putString(putExtraDetails, details);
    startOnClickBundle.putString(putExtraErstellt, erstellt);


    Intent startOnClick = new Intent(context, Broad.class);
    startOnClick.putExtras(startOnClickBundle);


    PendingIntent pendingIntentLetSleep = PendingIntent.getBroadcast(mContext, 0, startOnClick, 0);

    NotificationCompat.Action action = new NotificationCompat
            .Action.Builder(R.mipmap.ic_launcher, "Title", pendingIntentLetSleep).build();

    Notification noti = new NotificationCompat.Builder(this)
            .setTicker("Recall: " + title)
            .addAction(action)
            .setContentTitle(title)
            .setAutoCancel(true)
            .setSmallIcon(android.R.drawable.ic_delete)
            .build();


    noti.flags = Notification.FLAG_AUTO_CANCEL;

    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    Random random = new Random();
    int mr = random.nextInt(9999 - 1000) + 1000;
    notificationManager.notify(mr, noti);
}

In deinem Broadcast musst du über eine Schleife auslesen oder per containsKey.

public class Broad extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e(Broad.class.getSimpleName(), String.valueOf(intent.getExtras().containsKey("title")));
        for (String s : intent.getExtras().keySet()) {
            Log.e(Broad.class.getSimpleName(), s);
        }
    }
}

— geändert am 15.11.2016 20:41:57

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

Lebensmittelwarnung App-Thread

Download Samsung Firmware Tool

Gelöschter Account
  • Forum-Beiträge: 47

17.11.2016 21:54:45 via Website

Danke Ludy, ich hab das Problem schon selber gefunden. Nur wenn man ein Problem löst taucht das andere auf.
Unzwar übergibt er die Daten korrekt und ich kann sie auslesen, leider nur beim ersten mal. Danach kriege ich alte Daten von den Intents die ich vorher eingegeben habe, wie könnte das kommen?

Ludy
  • Mod
  • Blogger
  • Forum-Beiträge: 6.782

18.11.2016 09:35:00 via App

Die Frage kann man nur mit mehr Code beantworten, es fehlt der Moment wo du den Text an die Methode übergibst.
Wahrscheinlich übergibst du nicht die neuen Daten an die Methode.

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

Lebensmittelwarnung App-Thread

Download Samsung Firmware Tool

Gelöschter Account
  • Forum-Beiträge: 47

18.11.2016 21:22:16 via Website

Zur Information es ist eine Erinnerungsapp, ich will das die erinnerung verschoben werden kann, deswegen die datenübertragung per Intent in den Broadcast Receiver. Leider hab ich den Code schon gelöscht weil ich keine Lust habe mich Tage lang mit der Sache zu beschäftigen. Kann es sein das die Intents einfach nicht gelöscht wurden, oder so?
Oder weil das Klassenobjekt noch im Speicher war und sich dachte ich lese die aktuellen PendingIntents aus, ohne Sie mit den neuen Daten zu füllen. Trotzdem vielen Dank für Ihre Antworten.