我想在应用程序内显示一条通知,当点击该通知而不启动活动时,该通知会消失。
我使用一个空的意图,并且有效:
Intent intent = new Intent();
PendingIntent contentIntent = PendingIntent.getActivity(context, (int)System.currentTimeMillis(), intent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, "")
.setSmallIcon(R.drawable.icon)
.setContentTitle(title)
.setContentText(text)
.setAutoCancel(true)
.setTicker(text);
.setContentIntent(contentIntent);
但是,有一些崩溃:
java.lang.RuntimeException: bad array lengths
at android.os.Parcel.readIntArray(Parcel.java:789)
at android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:339)
at android.app.NotificationManager.notify(NotificationManager.java:139)
at android.app.NotificationManager.notify(NotificationManager.java:112)
...
根据this SO answer,崩溃似乎是由于intent
没有开始活动而发生的。
可以通过其ID消除通知,但是当没有活动可启动并调用dismiss方法时,我无法将其消除。
如何在不使用空意图的情况下轻按应用内的轻击通知?
根据this SO questions,这似乎是Android问题。我报告的崩溃也发生在Android 4.3上。
根据this SO answer,这似乎是由于setLargeIcon
设置的位图太大。所以现在我要用Glide减小位图的大小。
答案 0 :(得分:1)
您可以创建一个调用BroadcastReceiver
的意图,然后取消该通知。
您的PendingIntent
可以这样创建:
private PendingIntent getCancelNotificationIntent() {
Intent cancelIntent = new Intent(context, CancelNotification.class);
return PendingIntent.getBroadcast(context, 0, cancelIntent, PendingIntent.FLAG_UPDATE_CURRENT);
}
CancelNotification.java
类类似于以下内容:
public class CancelNotification extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
notificationManager.cancel(NOTIFICATION_ID);
}
}
答案 1 :(得分:1)
如果您不想在用户点击通知时启动活动,则可以构建挂起的意图,该意图发送广播或启动服务。
这里是一个例子:
PendingIntent.getBroadcast(context, 12, new Intent("any intent action"), PendingIntent.FLAG_UPDATE_CURRENT)
答案 2 :(得分:1)
但是阻止您的活动执行以下操作的原因:
@Override
public void onCreate(Bundle savedInstanceState) {}
清单中有其他nodisplay主题:
android:theme="@android:style/Theme.NoDisplay"
这仅仅是一个no-op。