【问题标题】:Notification Action Intent not fired通知操作意图未触发
【发布时间】:2019-04-08 06:44:16
【问题描述】:

单击通知操作不会触发运行 BroadcastReceiver

Intent cancelIntent = new Intent(c, NotificationBroadcast.class);
cancelIntent.setAction(CANCEL_UPLOAD);
cancelIntent.putExtra(EXTRA_REQUEST, new Request(request));
//c is ApplicationContext
PendingIntent cancel = getBroadcast(c,1, cancelIntent,
                FLAG_CANCEL_CURRENT);

nb.addAction(R.drawable.close, c.getString(R.string.cancel), cancel);

NotificationBroadcast 实现

public class AppNotification {
   public static class NotificationBroadcast extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Request cancel = cancelRequest((Request) intent.getParcelableExtra(EXTRA_REQUEST));
            if (CANCEL_UPLOAD.equals(intent.getAction()))
                cancel.clearFlag(FLAG_REQUEST);
            updateRequest(context, cancel);
        }
    }
}

我希望 NotificationBroadcast#onReceive 在单击通知操作但未被调用时被调用;

【问题讨论】:

  • NotificationBroadcast 是否已在您的清单中注册?如果是这样,怎么做?当您单击操作时,您是否在 Logcat 中看到任何消息?
  • 不,NotificationBroadcast 没有注册,因为我使用了明确的意图。

标签: java android android-notifications


【解决方案1】:

NotificationBroadcast 未注册,因为我使用的是显式意图

没关系。所有接收器都需要通过清单或通过Context 上的registerReceiver() 调用进行注册。在您的情况下,由于您使用 PendingIntent 进行通知操作,因此您需要使用 manifest 选项。

清单中的<receiver> 不需要<intent-filter>,因为您使用的是显式广播。但是,<receiver> 元素必须仍然存在。

此外,由于您选择让您的接收者成为 static 类,您的 android:name 为您的 <receiver> 需要考虑到这一点。

【讨论】:

  • 我在清单中注册了 NotificationBroadcast,它现在正在工作。谢谢
猜你喜欢
  • 1970-01-01
  • 2013-01-28
  • 2014-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多