三星和小米中的通知显示此应用尚未向您发送任何通知

Notification in Samsung and Xiaomi show This app hasn't send you any notification

我的通知有问题,通知没有出现在我的小米和三星设备上,但适用于其他设备。我已经尝试过人们推荐的方法,比如尝试自动启动、管理电池设置,但它仍然没有出现在两台设备上。我也尝试使用通知库,但结果是一样的。奇怪的是,当我检查通知设置,然后点击应用程序时,出现如下图

samsung

这是我的通知代码:

public void showNotification() {
    String appname = "App Name";
    String title = "Notification Title";
    String text = "This is the notification text";
    String iconUrl = "http://url.to.image.com/image.png";

    NotificationManager notifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    TaskStackBuilder stackBuilder = TaskStackBuilder.from(MainActivity.this);
    stackBuilder.addParentStack(NewsActivity.class);
    stackBuilder.addNextIntent(new Intent(MainActivity.this, NewsActivity.class));
    PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationCompat.Builder builder = new NotificationCompat.Builder(MainActivity.this);
    builder.setContentTitle(title).setContentInfo(appname).setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.logo_wanda_flp)).setContentText(text).setContentIntent(pendingIntent);
    builder.setSmallIcon(R.drawable.logo_wanda_flp);

    notifyManager.notify("textid", 123, builder.getNotification());
}

如果不先注册通知渠道,代码将无法在 Android 8 (API 26) 及更高版本上运行。在那之前的 Android 上,它会工作得很好。 下面的一些代码片段来自 here.


正在创建通知渠道

在您的activity中注册通知渠道,然后再尝试显示任何通知。或者,您可以在任何活动或服务开始之前在自定义 Application class 中注册它们(但为了简单起见,此处不会显示)。

@Override
public void onCreate(Bundle savedInstanceState) {
    createNotificationChannel(); // Registering a notification channel
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
}

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 behaviors after this
        NotificationManager notificationManager = getSystemService(NotificationManager.class);
        notificationManager.createNotificationChannel(channel);
    }
}

发送通知

public void showNotification() {
    // ...
    // NotificationCompat.Builder builder = new NotificationCompat.Builder(MainActivity.this);
    // Replace with line below.
    NotificationCompat.Builder builder = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID);
    // ...
}