Oreo 中的通知问题
Issue with Notifications in Oreo
Google 在 Oreo 中取得了巨大的成就 breaking change - 他们停止了所有应用程序中的通知功能。我现在正在处理更改我所有的应用程序,但我遇到了一些问题。 . .
现在会发布通知,当用户触摸通知时,它会正确触发应用程序。 但是, (1) 通知并没有消失。要摆脱它,用户必须删除它。另外 (2) 在发布多个通知后,我的应用程序图标上的点保持为一个。
我正在使用以下通知助手 class 我发现由 Bipin Pandey 发布:
public class NotificationHelper {
private Context mContext;
private NotificationManager mNotificationManager;
private NotificationCompat.Builder mBuilder;
public static final String NOTIFICATION_CHANNEL_ID = "10001";
public NotificationHelper(Context context) {
mContext = context;
}
/**
* Create and push the notification
*/
public void createNotification(String title, String message)
{
/**Creates an explicit intent for an Activity in your app**/
Intent resultIntent = new Intent(mContext , MainActivity.class);
resultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent resultPendingIntent = PendingIntent.getActivity(mContext,
0 /* Request code */, resultIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder = new NotificationCompat.Builder(mContext);
mBuilder.setSmallIcon(R.drawable.ticon);
mBuilder.setContentTitle(title)
.setContentText(message)
.setAutoCancel(false)
.setSound(Settings.System.DEFAULT_NOTIFICATION_URI)
.setContentIntent(resultPendingIntent);
mNotificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O)
{
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "NOTIFICATION_CHANNEL_NAME", importance);
notificationChannel.enableLights(true);
notificationChannel.setLightColor(Color.RED);
notificationChannel.enableVibration(true);
notificationChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
assert mNotificationManager != null;
mBuilder.setChannelId(NOTIFICATION_CHANNEL_ID);
mNotificationManager.createNotificationChannel(notificationChannel);
}
assert mNotificationManager != null;
mNotificationManager.notify(0 /* Request Code */, mBuilder.build());
}
}
下面的代码执行这个助手class
NotificationHelper myNotify = new NotificationHelper(context);
myNotify.createNotification("New Message",mesText);
您设置了 setAutoCancel(false)
,因此当您触发通知时,通知不会自动取消。如果您想要点击通知以删除通知(以及与通知关联的点),请删除该行。
您将 setAutoCancel 属性 设为 false。因此,当用户触摸它时,通知不会被取消。这适用于您想要自己处理删除通知的情况。
从 NotificationBuilder 中删除该行,您的逻辑应该会按预期工作。
方法说明:
public Notification.Builder setAutoCancel (boolean autoCancel)
Make this notification automatically dismissed when the user touches it.
在此处详细了解通知自动取消:
https://developer.android.com/reference/android/app/Notification.Builder.html#setAutoCancel(boolean)
Google 在 Oreo 中取得了巨大的成就 breaking change - 他们停止了所有应用程序中的通知功能。我现在正在处理更改我所有的应用程序,但我遇到了一些问题。 . .
现在会发布通知,当用户触摸通知时,它会正确触发应用程序。 但是, (1) 通知并没有消失。要摆脱它,用户必须删除它。另外 (2) 在发布多个通知后,我的应用程序图标上的点保持为一个。
我正在使用以下通知助手 class 我发现由 Bipin Pandey 发布:
public class NotificationHelper {
private Context mContext;
private NotificationManager mNotificationManager;
private NotificationCompat.Builder mBuilder;
public static final String NOTIFICATION_CHANNEL_ID = "10001";
public NotificationHelper(Context context) {
mContext = context;
}
/**
* Create and push the notification
*/
public void createNotification(String title, String message)
{
/**Creates an explicit intent for an Activity in your app**/
Intent resultIntent = new Intent(mContext , MainActivity.class);
resultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent resultPendingIntent = PendingIntent.getActivity(mContext,
0 /* Request code */, resultIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder = new NotificationCompat.Builder(mContext);
mBuilder.setSmallIcon(R.drawable.ticon);
mBuilder.setContentTitle(title)
.setContentText(message)
.setAutoCancel(false)
.setSound(Settings.System.DEFAULT_NOTIFICATION_URI)
.setContentIntent(resultPendingIntent);
mNotificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O)
{
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "NOTIFICATION_CHANNEL_NAME", importance);
notificationChannel.enableLights(true);
notificationChannel.setLightColor(Color.RED);
notificationChannel.enableVibration(true);
notificationChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
assert mNotificationManager != null;
mBuilder.setChannelId(NOTIFICATION_CHANNEL_ID);
mNotificationManager.createNotificationChannel(notificationChannel);
}
assert mNotificationManager != null;
mNotificationManager.notify(0 /* Request Code */, mBuilder.build());
}
}
下面的代码执行这个助手class
NotificationHelper myNotify = new NotificationHelper(context);
myNotify.createNotification("New Message",mesText);
您设置了 setAutoCancel(false)
,因此当您触发通知时,通知不会自动取消。如果您想要点击通知以删除通知(以及与通知关联的点),请删除该行。
您将 setAutoCancel 属性 设为 false。因此,当用户触摸它时,通知不会被取消。这适用于您想要自己处理删除通知的情况。
从 NotificationBuilder 中删除该行,您的逻辑应该会按预期工作。
方法说明:
public Notification.Builder setAutoCancel (boolean autoCancel)
Make this notification automatically dismissed when the user touches it.
在此处详细了解通知自动取消:
https://developer.android.com/reference/android/app/Notification.Builder.html#setAutoCancel(boolean)