How to execute a method by clicking a notification

后端 未结 2 1987
渐次进展
渐次进展 2020-11-28 07:20

I have an application with two buttons. One button that \"closes\" the application and one that begins the algorithm. When I click \"begin\" it \"hides\" the application and

2条回答
  •  挽巷
    挽巷 (楼主)
    2020-11-28 08:05

    After several iterations of trial and error, I finally found a fairly straightforward and clean way to run an arbitrary method when a notification's action is clicked. In my solution, there is one class (I'll call it NotificationUtils) that creates the notification and also contains an IntentService static inner class that will run when actions on the notification are clicked. Here is my NotificationUtils class, followed by the necessary changes to AndroidManifest.xml:

    public class NotificationUtils {
        public static final int NOTIFICATION_ID = 1;
    
        public static final String ACTION_1 = "action_1";
    
        public static void displayNotification(Context context) {
    
            Intent action1Intent = new Intent(context, NotificationActionService.class)
                .setAction(ACTION_1);
    
            PendingIntent action1PendingIntent = PendingIntent.getService(context, 0,
                    action1Intent, PendingIntent.FLAG_ONE_SHOT);
    
            NotificationCompat.Builder notificationBuilder =
                    new NotificationCompat.Builder(context)
                            .setSmallIcon(R.drawable.ic_launcher)
                            .setContentTitle("Sample Notification")
                            .setContentText("Notification text goes here")
                            .addAction(new NotificationCompat.Action(R.drawable.ic_launcher,
                                    "Action 1", action1PendingIntent));
    
            NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
            notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build());
        }
    
        public static class NotificationActionService extends IntentService {
            public NotificationActionService() {
                super(NotificationActionService.class.getSimpleName());
            }
    
            @Override
            protected void onHandleIntent(Intent intent) {
                String action = intent.getAction();
                DebugUtils.log("Received notification action: " + action);
                if (ACTION_1.equals(action)) {
                    // TODO: handle action 1.
                    // If you want to cancel the notification: NotificationManagerCompat.from(this).cancel(NOTIFICATION_ID);
                }
            }
    }
    

    Now just implement your actions in onHandleIntent and add the NotificationActionService to your manifest within the tags:

    
    

    Summary:

    • Create a class that will create the notification.
    • Inside that class, add a IntentService inner classes (make sure it is static or you will get a cryptic error!) that can run any method based on the action that was clicked.
    • Declare the IntentService class in your manifest.

提交回复
热议问题