How to add button to notifications in android?

前端 未结 8 1458
孤独总比滥情好
孤独总比滥情好 2020-12-05 03:53

My app plays music and when users open notifications screen by swiping from the top of the screen ( or generally from the bottom right of the screen on tablets ), I want to

8条回答
  •  失恋的感觉
    2020-12-05 04:32

    tested, working code with android Pie. These all go inside the same service class.

    Show a notification:

    public void setNotification() {
    
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
        {
        NotificationChannel channel = new NotificationChannel("a", "status", NotificationManager.IMPORTANCE_DEFAULT);
        channel.setDescription("notifications");
        notificationManager = getSystemService(NotificationManager.class);
        notificationManager.createNotificationChannel(channel);
    
        }
    else
        notificationManager =  (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    
    
    Receiver.service = this;
    Notification.MediaStyle style = new Notification.MediaStyle();
    
    notification = new Notification.Builder(this)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentTitle("Notification")
            .addAction(R.drawable.close_icon,  "quit_action", makePendingIntent("quit_action"))
            .setStyle(style);
    
    style.setShowActionsInCompactView(0);
    
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
        {
        notification.setChannelId("a");
        }
    
    // notificationManager.notify(123 , notification.build()); // pre-oreo
    startForeground(126, notification.getNotification());
    }
    

    Helper function:

    public PendingIntent makePendingIntent(String name)
        {
        Intent intent = new Intent(this, FloatingViewService.Receiver.class);
        intent.setAction(name);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
        return pendingIntent;
        }
    

    To handle the actions:

    static public class Receiver extends BroadcastReceiver {
    static FloatingViewService service;
    
    @Override
    public void onReceive(Context context, Intent intent)
        {
    
        String whichAction = intent.getAction();
    
        switch (whichAction)
            {
    
            case "quit_action":
                service.stopForeground(true);
                service.stopSelf();
                return;
    
            }
    
        }
    }
    

    You'll need to update your manifest too:

    
            
                
            
        
    

提交回复
热议问题