以编程方式启用通知渠道

3

我可以使用以下代码检查频道是否启用/禁用:

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的新通道则无效。

如何解决这个问题?


如果第三方应用程序可以启用/禁用通道。那么拥有频道有什么用途?您不能更改频道优先级。 - ADM
你可能只能操纵自己应用程序的通道,而非其他应用程序。看起来可以通过编程方式将它们禁用,将重要性设置为“无”。 - Kenenisa Bekele
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)
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接