以编程方式启用通知通道

问题描述 投票:0回答:2

我可以检查通道是否已启用/禁用

NotificationChannel channel = manager.getNotificationChannel(channelId);
boolean isEnabled = channel.getImportance() != IMPORTANCE_NONE;

但是如果通道未启用,那么我想通过将其设置为 IMPORTANCE_HIGH 来启用它

if (!isEnabled) {
channel.setImportance(NotificationManager.IMPORTANCE_HIGH);
manager.createNotificationChannel(channel);
}

问题是频道没有更新,只有当我尝试使用 IMPORTANCE_NONE 禁用它(以防其启用)时它才有效,但不是这样。

我尝试删除频道并创建一个具有不同 id 的新频道,这可行,但不能创建具有相同 id 的新频道。

如何解决这个问题?

java android android-notifications android-8.0-oreo android-settings
2个回答
3
投票

您无法在不删除频道的情况下以编程方式更改频道重要性。

因为用户可能手动更改了重要性。

以编程方式实现此目的,以获取频道并使用新 ID 创建新频道。 删除旧频道。 如果使用以前的 id 创建频道,您的更改将不会反映

供参考,检查 WhatsApp 应用程序尝试从应用程序更改铃声并在左下角的频道中查看x频道已删除消息


0
投票

当通知通道被禁用时,您所能做的就是要求用户启用它。您可以将用户直接导航至频道设置屏幕。

fun openNotificationChannelSettings(context: Context, channelId: String) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS)
        intent.putExtra(Settings.EXTRA_APP_PACKAGE, context.packageName)
        intent.putExtra(Settings.EXTRA_CHANNEL_ID, channelId)
        context.startActivity(intent)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.