button ändern - Wie füge ich Benachrichtigungen zu Android hinzu?





länge meta (5)


Fügen Sie der Benachrichtigung eine Aktionsschaltfläche hinzu

Intent snoozeIntent = new Intent(this, MyBroadcastReceiver.class);
snoozeIntent.setAction(ACTION_SNOOZE);
snoozeIntent.putExtra(EXTRA_NOTIFICATION_ID, 0);
PendingIntent snoozePendingIntent =
        PendingIntent.getBroadcast(this, 0, snoozeIntent, 0);

NotificationCompat.Builder mBuilder = new 
NotificationCompat.Builder(this, CHANNEL_ID)
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("My notification")
        .setContentText("Hello World!")
        .setPriority(NotificationCompat.PRIORITY_DEFAULT)
        .setContentIntent(pendingIntent)
        .addAction(R.drawable.ic_snooze, getString(R.string.snooze),
                snoozePendingIntent);

Weitere Informationen erhalten Sie unter here

Meine App spielt Musik ab und wenn Nutzer den Benachrichtigungsbildschirm öffnen, indem sie vom oberen Bildschirmrand (oder generell von der unteren rechten Ecke des Bildschirms auf Tablets) wischen, möchte ich ihnen einen Button zeigen, um die gerade abgespielte Musik anzuhalten und sie erneut zu starten Sie wollen.

Ich plane nicht, ein Widget auf dem Homescreen des Benutzers zu platzieren, sondern nur in Benachrichtigungen. Wie kann ich das machen?




Ich werde versuchen, eine Lösung bereitzustellen, die ich verwendet habe, und die meisten Musikplayer verwenden die gleiche Technik, um Player-Steuerelemente in der Benachrichtigungsleiste anzuzeigen.

Ich führe einen Dienst aus, mit dem Media Player und alle seine Steuerelemente verwaltet werden. Aktivität Die Benutzersteuerung interagiert mit dem Dienst, indem sie beispielsweise Intents an den Dienst sendet

 Intent i = new Intent(MainActivity.this, MyRadioService.class);
        i.setAction(Constants.Player.ACTION_PAUSE);

        startService(i);

Um Absichten zu erhalten und Aktionen in der Dienstklasse auszuführen, verwende ich den folgenden Code in der onStartCommand-Methode des Dienstes

 @Override
public int onStartCommand(Intent intent, int flags, int startId) {


    if (intent.getAction().equals(Constants.Player.ACTION_PAUSE)) {
        if(mediaPlayer.isPlaying()) {
            pauseAudio();
        }
    }

Jetzt um die Antwort auf Ihre Frage zu präzisieren, um Benachrichtigungen mit den Steuerelementen anzuzeigen. Sie können folgende Methoden aufrufen, um Benachrichtigungen mit Steuerelementen anzuzeigen.

   //    showNotification
private void startAppInForeground() {
//  Start Service in Foreground

    // Using RemoteViews to bind custom layouts into Notification
    RemoteViews views = new RemoteViews(getPackageName(),
            R.layout.notification_status_bar);

// Define play control intent 
   Intent playIntent = new Intent(this, MyRadioService.class);
    playIntent.setAction(Constants.Player.ACTION_PLAY);

// Use the above play intent to set into PendingIntent
    PendingIntent pplayIntent = PendingIntent.getService(this, 0,
            playIntent, 0);

// binding play button from layout to pending play intent defined above 
views.setOnClickPendingIntent(R.id.status_bar_play, pplayIntent);
views.setImageViewResource(R.id.status_bar_play,
            R.drawable.status_bg);

Notification status = null;
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
        status = new Notification.Builder(this).build();
    }

  status.flags = Notification.FLAG_ONGOING_EVENT;
    status.icon = R.mipmap.ic_launcher;
    status.contentIntent = pendingIntent;
    startForeground(Constants.FOREGROUND_SERVICE, status);

} Hoffe das hilft dir wirklich. Und Sie werden erreichen können, was Sie wollen. Habe eine Happy Coding :)




Sie können eine Absicht für die Aktion erstellen (in diesem Fall die Wiedergabe beenden) und diese als Aktionsschaltfläche zu Ihrer Benachrichtigung hinzufügen.

Intent snoozeIntent = new Intent(this, MyBroadcastReceiver.class);
snoozeIntent.setAction(ACTION_SNOOZE);
snoozeIntent.putExtra(EXTRA_NOTIFICATION_ID, 0);
PendingIntent snoozePendingIntent =
        PendingIntent.getBroadcast(this, 0, snoozeIntent, 0);

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, CHANNEL_ID)
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("My notification")
        .setContentText("Hello World!")
        .setPriority(NotificationCompat.PRIORITY_DEFAULT)
        .setContentIntent(pendingIntent)
        .addAction(R.drawable.ic_snooze, getString(R.string.snooze),
                snoozePendingIntent);

Bitte beachten Sie die Android Dokumentation here




    // It shows buttons on lock screen (notification).

Notification notification = new Notification.Builder(context)
    .setVisibility(Notification.VISIBILITY_PUBLIC)
    .setSmallIcon(R.drawable.NotIcon)
    .addAction(R.drawable.ic_prev, "button1",ButtonOneScreen) 
    .addAction(R.drawable.ic_pause, "button2", ButtonTwoScreen)  
   .....
    .setStyle(new Notification.MediaStyle()
    .setShowActionsInCompactView(1)
    .setMediaSession(mMediaSession.getSessionToken())
    .setContentTitle("your choice")
    .setContentText("Again your choice")
    .setLargeIcon(buttonIcon)
    .build();

Bitte beziehen Sie sich für weitere Details Klicken Sie hier




Es gibt viele verschiedene Ansätze, um diese ANDROID_IDProbleme zu umgehen ( nullmanchmal geben Geräte eines bestimmten Modells immer die gleiche ID zurück) mit Vor- und Nachteilen:

  • Implementierung eines benutzerdefinierten ID-Generierungsalgorithmus (basierend auf Geräteeigenschaften, die statisch sein sollen und sich nicht ändern -> wer weiß)
  • Missbrauch anderer IDs wie IMEI , Seriennummer, Wi-Fi / Bluetooth-MAC-Adresse (diese sind nicht auf allen Geräten vorhanden oder es werden zusätzliche Berechtigungen benötigt)

Ich selbst bevorzuge die Verwendung einer vorhandenen OpenUDID-Implementierung (siehe https://github.com/ylechelle/OpenUDID ) für Android (siehe https://github.com/vieux/OpenUDID ). Es ist einfach zu integrieren und verwendet die ANDROID_IDoben genannten Probleme mit den Fallbacks.





android button widget notifications