如何通过单击通知来执行方法 [英] How to execute a method by clicking a notification

查看:18
本文介绍了如何通过单击通知来执行方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个带有两个按钮的应用程序.一个关闭"应用程序的按钮和一个启动算法的按钮.当我单击开始"时,它会隐藏"应用程序并在通知栏中显示通知.我需要能够在点击/按下通知时执行/调用一个方法.这类问题有几个答案,但它们非常含糊不清,只有一个指向 BroadcastReceiver 上文档的链接.

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 displays a notification in the notification bar. I need to be able to execute/call a method when the notification is clicked/pressed. There are a few answers for this sort of question, but they are incredibly vague and one only points to a link to the doc on BroadcastReceiver.

如果您要在 BroadcastReceiver 文档中留下网址并说阅读此页面",请不要回复此问题.如果您要解释我如何使用 BroadcastReceiver 来执行一个方法(从显示通知的同一个类中),请向我展示一些如何完成的代码.

If you are going to leave a url to the BroadcastReceiver doc and say "read this page," please don't reply to this question. If you are going to explain how I could use BroadcastReceiver to execute a method (from within the same class that displayed the notification), please show me some code for how this could be done.

我的算法:按下按钮,显示通知,点击通知,调用方法(不显示活动).就是这样.

My algorithm: press a button, display notification, click notification, call a method (don't display activity). That's it.

如果不可能,请告诉我.如果是,请告诉我你会做些什么来使它成为可能.android sdk 的开发者不应该忽视这么简单的事情.

If it's not possible, just let me know. If it is, please show me what you would do to make it possible. Something this simple shouldn't have been overlooked by the developers of the android sdk.

推荐答案

经过多次反复试验和错误,我终于找到了一种相当简单明了的方法,可以在单击通知的操作时运行任意方法.在我的解决方案中,有一个类(我将其称为 NotificationUtils)用于创建通知,并且还包含一个 IntentService 静态内部类,该类将在单击通知上的操作时运行.这是我的 NotificationUtils 类,然后是对 AndroidManifest.xml 的必要更改:

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);
            }
        }
}

现在只需在 onHandleIntent 中实现您的操作,并将 NotificationActionService 添加到您的清单中的 标签:

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

<service android:name=".NotificationUtils$NotificationActionService" />

总结:

  • 创建一个将创建通知的类.
  • 在那个类中,添加一个 IntentService 内部类(确保它是静态的,否则你会得到一个神秘的错误!),它可以根据点击的操作运行任何方法.
  • 在清单中声明 IntentService 类.
  • 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.

这篇关于如何通过单击通知来执行方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆