而不是pendingIntent,在Notification.addAction()中执行函数。可能吗?

时间:2016-06-28 11:30:41

标签: java android notifications android-notifications

我想在我的通知上按下按钮时执行一个方法。为此,我正在向我的通知添加PendingIntent的操作:

Intent intent = new Intent(context, AlertActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

Notification notification = new Notification.Builder(MainActivity.this)
                    .setContentTitle("New Notification")
                    .setContentText("Click Here")
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setContentIntent(pendingIntent)
                    .addAction(R.mipmap.ic_launcher, "Test2", pendingIntent)
                    .build();
notification.flags |= Notification.FLAG_AUTO_CANCEL;

NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.notify(0, notification);

这很有效,但是当用户调用动作时我不想启动Activity。我只需要做一些工作。

为此目的,我实施了一个ServicePendingIntent应该将其作为目标:

public class MyServices extends IntentService {
    public MyServices() {
        super("MyServices");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        clearNotification();
    }

    public void clearNotification() {
        NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        notificationManager.cancel(0);
        Intent intent = new Intent(MyServices.this, MainActivity.class); 
//Starting new activity just to check
        startActivity(intent);
    }
}

我像这样创建PendingIntent

final Intent intent = new Intent(context, MyServices.class);
final PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);

然而,当我在通知上调用操作时,没有任何反应。我做错了什么?

1 个答案:

答案 0 :(得分:3)

通知不是您申请的一部分。它由操作系统管理。事实上,您可以使用API​​来显示/取消/等通知。

待处理的意图允许外部代码(例如通知)启动您的app / activity / service / broadcastreceiver。如果没有未决意图,就无法做到这一点。

  

我的任务是在单击特定操作按钮时执行某段代码,并清除通知;没有开始任何活动

您不必开始活动。您可以在没有UI的广播接收器中执行此操作。或者,正如CommonsWare建议的那样,使用IntentService,具体取决于您在“代码段”中所执行的操作。 IntentServices在单独的线程中处理工作。