我正在尝试显示由我创建的通知,而不是 firebase。它适用于旧手机,不适用于奥利奥
I am trying to show a notification created by me, not firebase. It works on old phones, not Oreo
这是尝试创建通知的代码:
NotificationManager notifManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notifManager.cancelAll();
PSTrip activeTrip = getActiveTrip();
Intent intent = new Intent(context, PSNewJourneyActivity.class);
intent.putExtra("id", activeTrip.getId());
intent.putExtra("userid", activeTrip.getOwner().getId() + "");
intent.putExtra("mode", "active");
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
playCheckoutSound(context, false);
int iUniqueId = (int) (System.currentTimeMillis() & 0xfffffff);
PendingIntent pIntent = PendingIntent.getActivity(context, iUniqueId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, "general");
mBuilder.setContentTitle(context.getString(R.string.passenger_name)).setContentText(context.getString(R.string.pit, "name")).setSmallIcon(R.drawable.notification_icon);
mBuilder.setContentIntent(pIntent);
Notification notification = mBuilder.build();
notification.flags |= Notification.FLAG_AUTO_CANCEL;
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(iUniqueId, notification);
如您所见,我 select 频道 ID,并为通知选择了一个唯一 ID,但仍然没有成功。我在这里做错了什么?
我也尝试在 Looper.getMainLooper 中调用它,不知道它会影响它,但仍然没有成功。
PS: 我的应用程序有一个前台服务,所以它有一个永久通知,让用户知道我的应用程序在后台运行。这是导致问题的原因吗?
编辑:
我在.notify之前添加了这个,在一个答案中找到:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
NotificationChannel notificationChannel = notificationManager.getNotificationChannel(channelId);
if (notificationChannel == null) {
int importance = NotificationManager.IMPORTANCE_HIGH;
notificationChannel = new NotificationChannel(channelId, channelDescription, importance);
notificationChannel.setLightColor(Color.GREEN);
notificationChannel.enableVibration(true);
notificationManager.createNotificationChannel(notificationChannel);
}
}
我的phone震动了,但是通知还是没有显示。
SDK 版本:
compileSdkVersion 27
buildToolsVersion '27.0.3'
defaultConfig {
minSdkVersion 17
targetSdkVersion 27
}
Phone:华为Mate 10 Pro。 Android8.0
Logcat 抛出这个问题:
05-22 12:34:32.916: E/NotificationService(1184): No Channel found for pkg=nl.hgrams.passenger, channelId=general, id=124397682, tag=null, opPkg=nl.hgrams.passenger, callingUid=10233, userId=0, incomingUserId=0, notificationUid=10233, notification=Notification(channel=general pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x10 color=0x00000000 vis=PRIVATE)
如果您的应用面向 Android 8.0,那么您必须指定一个通知渠道。
NotificationChannel notificationChannel = new NotificationChannel(CHANNEL_ONE_ID,
CHANNEL_ONE_NAME,
notifManager.IMPORTANCE_HIGH);
notificationChannel.enableLights(true);
notificationChannel.setLightColor(Color.RED);
notificationChannel.setShowBadge(true);
notificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
getManager().createNotificationChannel(notificationChannel);
检查此 link 以创建频道。
https://www.androidauthority.com/android-8-0-oreo-app-implementing-notification-channels-801097/
这是尝试创建通知的代码:
NotificationManager notifManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notifManager.cancelAll();
PSTrip activeTrip = getActiveTrip();
Intent intent = new Intent(context, PSNewJourneyActivity.class);
intent.putExtra("id", activeTrip.getId());
intent.putExtra("userid", activeTrip.getOwner().getId() + "");
intent.putExtra("mode", "active");
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
playCheckoutSound(context, false);
int iUniqueId = (int) (System.currentTimeMillis() & 0xfffffff);
PendingIntent pIntent = PendingIntent.getActivity(context, iUniqueId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, "general");
mBuilder.setContentTitle(context.getString(R.string.passenger_name)).setContentText(context.getString(R.string.pit, "name")).setSmallIcon(R.drawable.notification_icon);
mBuilder.setContentIntent(pIntent);
Notification notification = mBuilder.build();
notification.flags |= Notification.FLAG_AUTO_CANCEL;
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(iUniqueId, notification);
如您所见,我 select 频道 ID,并为通知选择了一个唯一 ID,但仍然没有成功。我在这里做错了什么? 我也尝试在 Looper.getMainLooper 中调用它,不知道它会影响它,但仍然没有成功。
PS: 我的应用程序有一个前台服务,所以它有一个永久通知,让用户知道我的应用程序在后台运行。这是导致问题的原因吗?
编辑:
我在.notify之前添加了这个,在一个答案中找到:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
NotificationChannel notificationChannel = notificationManager.getNotificationChannel(channelId);
if (notificationChannel == null) {
int importance = NotificationManager.IMPORTANCE_HIGH;
notificationChannel = new NotificationChannel(channelId, channelDescription, importance);
notificationChannel.setLightColor(Color.GREEN);
notificationChannel.enableVibration(true);
notificationManager.createNotificationChannel(notificationChannel);
}
}
我的phone震动了,但是通知还是没有显示。
SDK 版本:
compileSdkVersion 27
buildToolsVersion '27.0.3'
defaultConfig {
minSdkVersion 17
targetSdkVersion 27
}
Phone:华为Mate 10 Pro。 Android8.0
Logcat 抛出这个问题:
05-22 12:34:32.916: E/NotificationService(1184): No Channel found for pkg=nl.hgrams.passenger, channelId=general, id=124397682, tag=null, opPkg=nl.hgrams.passenger, callingUid=10233, userId=0, incomingUserId=0, notificationUid=10233, notification=Notification(channel=general pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x10 color=0x00000000 vis=PRIVATE)
如果您的应用面向 Android 8.0,那么您必须指定一个通知渠道。
NotificationChannel notificationChannel = new NotificationChannel(CHANNEL_ONE_ID,
CHANNEL_ONE_NAME,
notifManager.IMPORTANCE_HIGH);
notificationChannel.enableLights(true);
notificationChannel.setLightColor(Color.RED);
notificationChannel.setShowBadge(true);
notificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
getManager().createNotificationChannel(notificationChannel);
检查此 link 以创建频道。
https://www.androidauthority.com/android-8-0-oreo-app-implementing-notification-channels-801097/