- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
调用:
public static void triggerTestNotification(Context ctx, String tag, int id) {
Notification not = new NotificationCompat.Builder(ctx)
.setContentTitle("Title").setContentText("Text")
.setAutoCancel(true) // cancel on click
.setSmallIcon(R.drawable.ic_launcher).build();
NotificationManager notificationManager = (NotificationManager) ctx
.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(tag, id, not);
}
在我的主要 Activity 的 onCreate()
中产生:
11-17 15:58:46.198: E/AndroidRuntime(1507): FATAL EXCEPTION: main
11-17 15:58:46.198: E/AndroidRuntime(1507): java.lang.RuntimeException: Unable to start activity ComponentInfo{gr.uoa.di.monitoring.android/gr.uoa.di.monitoring.android.activities.MainActivity}: java.lang.IllegalArgumentException: contentIntent required: pkg=gr.uoa.di.monitoring.android id=0 notification=Notification(vibrate=null,sound=null,defaults=0x0,flags=0x10)
//...
11-17 15:58:46.198: E/AndroidRuntime(1507): Caused by: java.lang.IllegalArgumentException: contentIntent required: pkg=gr.uoa.di.monitoring.android id=0 notification=Notification(vibrate=null,sound=null,defaults=0x0,flags=0x10)
11-17 15:58:46.198: E/AndroidRuntime(1507): at android.os.Parcel.readException(Parcel.java:1326)
11-17 15:58:46.198: E/AndroidRuntime(1507): at android.os.Parcel.readException(Parcel.java:1276)
11-17 15:58:46.198: E/AndroidRuntime(1507): at android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:274)
11-17 15:58:46.198: E/AndroidRuntime(1507): at android.app.NotificationManager.notify(NotificationManager.java:133)
11-17 15:58:46.198: E/AndroidRuntime(1507): at gr.uoa.di.monitoring.android.C.triggerTestNotification(C.java:200)
11-17 15:58:46.198: E/AndroidRuntime(1507): at gr.uoa.di.monitoring.android.activities.MainActivity.onCreate(MainActivity.java:44)
11-17 15:58:46.198: E/AndroidRuntime(1507): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-17 15:58:46.198: E/AndroidRuntime(1507): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
11-17 15:58:46.198: E/AndroidRuntime(1507): ... 11 more
注意 contentIntent需要。
但是文档 could not be more clear :
Required notification contents
A Notification object must contain the following:
A small icon, set by setSmallIcon()
A title, set by setContentTitle()
Detail text, set by setContentText()
Optional notification contents and settings
All other notification settings and contents are optional. To learn more about them, see the reference documentation for NotificationCompat.Builder.
这个意见反射(reflect)在various所以 answers结果是 SO questions (和 another 一个)。
解决方法:
final Intent emptyIntent = new Intent();
PendingIntent pi = PendingIntent.getActivity(ctx, NOT_USED,
emptyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
//...
.setContentIntent(pi).build;
但这真的需要吗?所有这些情况都是另一个 Android 文档错误 吗?是否依赖于 API?
注意我的目标 SDK 是 17 并在 2.3.7 手机上运行
最佳答案
如果您使用像 waybackmachine 这样的缓存服务并且您寻找 previous versions在通知指南中,您会看到指南确实告诉您 contentIntent
是必需的。
这也反射(reflect)在 Android 源代码中。 NotificationManagerService
在显示通知之前处理通知检查。
在Gingerbread
,作为 enqueueNotificationInternal()
方法的一部分,它具有以下检查:
if (notification.icon != 0) {
if (notification.contentView == null) {
throw new IllegalArgumentException("contentView required: pkg=" + pkg
+ " id=" + id + " notification=" + notification);
}
if (notification.contentIntent == null) {
throw new IllegalArgumentException("contentIntent required: pkg=" + pkg
+ " id=" + id + " notification=" + notification);
}
}
在以后的 Android 版本上,例如 Ice Cream Sandwich
,那张支票不见了:
if (notification.icon != 0) {
if (notification.contentView == null) {
throw new IllegalArgumentException("contentView required: pkg=" + pkg
+ " id=" + id + " notification=" + notification);
}
}
因此,contentIntent
在 Gingerbread 及以下版本上需要。
关于android - NotificationCompat.Builder 是否需要 setContentIntent(PendingIntent)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20032249/
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_C
我正在阅读关于 google official website for building Notification 的教程 在实现代码时,我注意到 NotificationCompat 存在于 Sup
嗨,当我尝试更新(迁移到 andoridx,我在本文末尾添加了一些图片)我的应用程序时遇到问题,尤其是在此代码中: .setStyle(new android.support.v4.media.app
我想在规定的时间显示通知。我使用“setWhen()”。但是 setWhen() 的任何参数都被忽略并且通知总是立即显示。我做错了什么?我的代码: NotificationCompat.Builder
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, channelId)
我是 Android 新手,收到错误消息:“NotificationCompat 无法解析为类型” MinSDK=9, TargetSDK=18, 到目前为止,所有来源都非常模糊地说明如何解决此问题,
具体来说,我认为任何使用 NotificationCompat 完成的事情都可以使用默认 API(级别 8)完成。我在这里错过了什么? NotificationCompat 引入了哪些使用 2.2 A
我有一个简单的 Android 应用程序,其中包含一个 Activity和 Service源自 MediaBrowserServiceCompat .我已通过使用 MediaBrowserCompat
出于某种原因我的NotificationCompat.Builder不会接受第二个参数,我不知道如何解决它。我看到了其他一些答案,但主要问题出在 gradle 版本中,但我的是最新的,如下所示: if
我正在使用 NotificationCompat 显示来电,但问题是时间限制较少,我想显示 NotificationCompat 40 秒,有什么办法可以增加显示通知的时间,因为当前显示通知的时间小于
我正在关注关于为媒体播放控件创建自定义通知的 android 文档。我读到建议将通知的样式设置为 DecoratedMediaCustomViewStyle,但这会给我以下编译错误。 错误:找不到符号
我正在尝试向我的应用添加通知。 API 级别是 8,所以,我需要使用 NotificationCompat 而不是 Notification,不是吗? 这是我的代码: NotificationMa
想知道是否有人可以提供帮助,我在使用 NotificationCompat.BigPictureStyle 时遇到了一些问题 - 我不知道我是否遗漏了什么,但是除了图片之外我的通知有效..我已经包含了
我在 AndroidStudio 1.4.1 中设置通知时遇到了 setStyle 函数的错误。 这是代码: NotificationCompat.Builder builder =
我正在尝试制作一个聊天应用程序,我的用户将在其中收到通知。通知量如此之大,如果我为每个通知创建一个条目,那么它会填满所有的地方,所以我想到应用 BigTextView 通知或 Stack of not
我想知道是否有人对这种类型的通知有一些经验。 在我的用例中,我想从我的服务触发一个通知,而不是它应该打开一个全屏视频。 setFullScreenIntent 方法看起来恰好解决了这个问题,因为它在文
String ns = Context.NOTIFICATION_SERVICE; NotificationManager mNotificationManager = (Notifi
当我添加通知时: NotificationCompat.Builder mBuilder = new NotificationC
当我尝试将我的通知代码设置为按钮时这部分总是给我错误 NotificationCompat.Builder mBuilder =new NotificationCompat.Builder(this)
我将如何使用它在类中创建的通知来停止前台服务? Intent stopnotificationIntent = new Intent(this, HelloIntentService.class);
我是一名优秀的程序员,十分优秀!