android - 提醒通知未按预期工作

标签 android push-notification heads-up-notifications

我已经为我的应用程序实现了抬头通知。代码是这样的:

private  String CHANNEL_ID = "message_notifications";
NotificationChannel mChannel = new NotificationChannel(CHANNEL_ID,"message_notifications", NotificationManager.IMPORTANCE_HIGH);


@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);


    String notification_title = remoteMessage.getNotification().getTitle();
    String notification_message = remoteMessage.getNotification().getBody();

    String click_action = remoteMessage.getNotification().getClickAction();


    String user_id = remoteMessage.getData().get("user_id");
    String user_name = remoteMessage.getData().get("user_name");
    String GROUP_KEY_CHIT_CHAT = "com.android.example.Chit_Chat";


    NotificationCompat.Builder mBuilder =
            new NotificationCompat.Builder(this, CHANNEL_ID)
                    .setSmallIcon(R.drawable.chitchat_icon)
                    .setContentTitle(notification_title)
                    .setAutoCancel(true)
                    .setPriority(NotificationCompat.PRIORITY_MAX)
                    .setGroup(GROUP_KEY_CHIT_CHAT)
                    .setDefaults(Notification.DEFAULT_ALL)
                    .setVisibility(NotificationCompat.VISIBILITY_PRIVATE)
                    .setContentText(notification_message);


    if (Build.VERSION.SDK_INT >= 21) mBuilder.setVibrate(new long[0]);
    Intent resultIntent = new Intent(click_action);
    resultIntent.putExtra("user_id", user_id);
    resultIntent.putExtra("user_name",user_name);

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
    stackBuilder.addNextIntentWithParentStack(resultIntent);
    stackBuilder.addParentStack(MainActivity.class);

    PendingIntent resultPendingIntent =
            stackBuilder.getPendingIntent(
                    0,
                    PendingIntent.FLAG_UPDATE_CURRENT
            );

    mBuilder.setContentIntent(resultPendingIntent);


    int mNotificationId = (int) System.currentTimeMillis();

    NotificationManager mNotificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        mChannel.setShowBadge(true);
        mChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
        mNotificationManager.createNotificationChannel(mChannel);
        mBuilder.setChannelId(CHANNEL_ID);
    }

    mNotificationManager.notify(mNotificationId,mBuilder.build());
}

问题是它只有在我将通知设置为弹出和声音时才能正常工作,否则它看起来像简单的通知。 Whatsapp 和其他应用程序默认设置为使用它们。我也想这样做。我想以编程方式将我的应用程序设置为默认使用抬头通知,而无需进入设置来启用它。有人可以帮我怎么做吗?
enter image description here

我需要将其设置为声音并弹出默认情况下未设置

最佳答案

Set the importance level通知 channel 到 IMPORTANCE_HIGH 显示为提示通知。

使用 setOngoing 将通知设置为进行中如果您希望仅在执行操作时关闭通知,请使用方法。用户不能关闭正在进行的通知,因此您的应用程序或服务必须注意取消它们。

如果您还想在请勿打扰模式下显示通知,您可以将类别设置为 CATEGORY_ALARM

如果您想要启动 Intent 而不是将通知发布到状态栏以要求用户立即注意,请使用 setFullScreenIntent

示例代码块

        Intent launch = new Intent(context, TargetActivity.class);
        launch.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION);
        PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0,
                launch, PendingIntent.FLAG_UPDATE_CURRENT);
        createNotificationChannel(mContext, NOTIFICATION_CHANNEL_ID, NotificationManager.IMPORTANCE_HIGH,
                R.string.notification_channel_name, R.string.notification_channel_description);
        NotificationCompat.Builder builder = new NotificationCompat.Builder(mContext, NOTIFICATION_CHANNEL_ID);
        builder.setContentTitle("Title");
        builder.setContentText("Content Text");
        builder.setStyle(new NotificationCompat.BigTextStyle()
                .bigText("Big Content Text"));
        builder.setSmallIcon(R.drawable.status_icon);
        builder.setFullScreenIntent(pendingIntent, true);
        builder.setOngoing(true);
        builder.setAutoCancel(true);
        builder.setCategory(NotificationCompat.CATEGORY_ALARM);
        builder.addAction(0, "Action Text", pendingIntent);
        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(mContext);
        notificationManager.notify(COMPLETE_NOTIFICATION_ID, builder.build());

   /**
     * create Notification channel
     * @param context
     * @param channelId
     * @param channelName
     * @param channelDescription
     */
    @RequiresApi(api = Build.VERSION_CODES.O)
    public static void createNotificationChannel(Context context, String channelId, int importance, int channelName, int channelDescription) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            CharSequence name = context.getString(channelName);
            String description = context.getString(channelDescription);
            NotificationChannel channel = new NotificationChannel(channelId, name, importance);
            channel.setDescription(description);
            NotificationManager notificationManager = context.getSystemService(NotificationManager.class);
            notificationManager.createNotificationChannel(channel);
        }

    }

关于android - 提醒通知未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58606156/

相关文章:

android - 某些应用程序如何阻止/替换单挑通知?

java - Android Media Muxer 不工作 [Android/Java]

java - 获取 ISP IP 地址 Android

javascript - `importScript` 无法在 serviceWorker 推送事件之前解决依赖关系

swift - 检查用户是否已在 Swift 中注册本地通知时出错

android - 是否可以将通知从抬头移动到状态栏?

没有堆栈跟踪的 Android "Shutting down VM"

Android 兼容设备(非手机)

firebase - 在 Flutter 中使用 Firebase Messaging ^8.0.0-dev.8 收到通知时如何运行函数?

android - 不启动新 Activity 的通知操作?