我需要一个能在Android上添加通知的程序。当有人点击通知时,它应该引导他们进行第二次活动。
我已经建立了代码。通知应该有效,但由于某种原因它无法正常工作。 Notification
根本没有显示。我不知道我错过了什么。
这些文件的代码:
Notification n = new Notification.Builder(this)
.setContentTitle("New mail from " + "[email protected]")
.setContentText("Subject")
.setContentIntent(pIntent).setAutoCancel(true)
.setStyle(new Notification.BigTextStyle().bigText(longText))
.build();
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// Hide the notification after it's selected
notificationManager.notify(0, n);
没有图标,代码将无法运行。因此,将setSmallIcon
调用添加到构建器链中,以便它可以工作:
.setSmallIcon(R.drawable.icon)
Android 8引入了一个使用channelId
设置NotificationChannel
属性的新要求。
private NotificationManager mNotificationManager;
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(mContext.getApplicationContext(), "notify_001");
Intent ii = new Intent(mContext.getApplicationContext(), RootActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, ii, 0);
NotificationCompat.BigTextStyle bigText = new NotificationCompat.BigTextStyle();
bigText.bigText(verseurl);
bigText.setBigContentTitle("Today's Bible Verse");
bigText.setSummaryText("Text in detail");
mBuilder.setContentIntent(pendingIntent);
mBuilder.setSmallIcon(R.mipmap.ic_launcher_round);
mBuilder.setContentTitle("Your Title");
mBuilder.setContentText("Your text");
mBuilder.setPriority(Notification.PRIORITY_MAX);
mBuilder.setStyle(bigText);
mNotificationManager =
(NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
// === Removed some obsoletes
if (Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.O)
{
String channelId = "Your_channel_id";
NotificationChannel channel = new NotificationChannel(
channelId,
"Channel human readable title",
Android.App.NotificationImportance.Default);
mNotificationManager.createNotificationChannel(channel);
mBuilder.setChannelId(channelId);
}
mNotificationManager.notify(0, mBuilder.build());
实际上the answer by ƒernando Valle似乎不正确。然后,你的问题过于含糊,因为你没有提到错误或不起作用。
看看你的代码我假设Notification
根本没有显示。
您的通知未显示,因为您没有提供图标。即使SDK文档没有提到它是必需的,事实上它实际上非常如此,并且你的Notification
不会没有它。
addAction
仅在4.1之后可用。在此之前,你将使用PendingIntent
发射Activity
。你似乎指定了PendingIntent
,所以你的问题在于其他地方。从逻辑上讲,必须得出结论,这是缺少的图标。
你错过了小图标。我犯了同样的错误,上面的步骤解决了它。
根据官方文档:Notification对象必须包含以下内容:
见http://developer.android.com/guide/topics/ui/notifiers/notifications.html
今天这让我感到沮丧,但我意识到这是因为在Android 9.0(Pie)上,默认情况下“请勿打扰”也会隐藏所有通知,而不是像Android 8.1(奥利奥)之前那样对它们进行静音。这不适用于通知。
我喜欢在我的开发设备上使用DND,所以进入DND设置并更改设置以简单地使通知静音(但不隐藏它们)为我修复它。
在Android 8.1(Oreo)发布通知后,Android版本必须创建通知渠道。如果您的应用中看不到Oreo + Androids的通知,则需要在应用启动时调用以下函数 -
private void createNotificationChannel() {
// Create the NotificationChannel, but only on API 26+ because
// the NotificationChannel class is new and not in the support library
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
CharSequence name = getString(R.string.channel_name);
String description = getString(R.string.channel_description);
int importance = NotificationManager.IMPORTANCE_DEFAULT;
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name,
importance);
channel.setDescription(description);
// Register the channel with the system; you can't change the importance
// or other notification behaviours after this
NotificationManager notificationManager =
getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(channel);
}
}
对我来说这是deviceToken
的一个问题。请检查数据库中的接收方和发送方设备令牌是否已正确更新,或者您在何处访问它以发送通知。
例如,使用以下命令在应用启动时更新设备令牌。因此它将始终正确更新。
// Device token for push notifications
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(
new OnSuccessListener<InstanceIdResult>() {
@Override
public void onSuccess(InstanceIdResult instanceIdResult) {
deviceToken = instanceIdResult.getToken();
// Insert device token into Firebase database
fbDbRefRoot.child("user_detail_profile").child(currentUserId).child("device_token")).setValue(deviceToken)
.addOnSuccessListener(
new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
}
});
}
});
我的Android应用程序遇到了同样的问题。我正在尝试通知,并发现通知显示在我的Android模拟器上运行了Android 7.0(牛轧糖)系统,而它没有在我的手机上运行Android 8.1(奥利奥)。
阅读完文档之后,我发现Android有一个名为通知通道的功能,没有它就会在Oreo设备上显示通知。以下是有关通知渠道的官方Android文档的链接。
不确定它是否仍处于活动状态,但您还需要更改build.gradle文件,并将使用过的Android SDK版本添加到其中,
实现'com.android.support:appcompat-v7:28.0.0'
在我的案例中,这就像一个魅力