0

在 Android 11 上,基本上有两层气泡设置:

  • 每个应用程序设置:

    • 所有对话都会冒泡
    • 选定的对话可以冒泡(默认)
    • 没有什么可以冒泡
  • 每次对话设置

    • 冒泡此对话
    • 不要冒泡这个对话
    • 默认(您无法直接设置此选项,因为该设置显示为切换;但是每个对话都以此选项开始,您可以通过转到通知设置 -> 气泡并按 × 来重置此选项)

它们以下列方式相互作用:

  • 如果所有对话都可以冒泡,请将此对话冒泡,除非将其设置为不冒泡(设置屏幕会显示:“所有对话都可以冒泡,除了:Foo”)
  • 如果所选对话可以冒泡,仅当此对话设置为冒泡时才会冒泡
  • 如果没有任何东西可以冒泡,请忽略每次对话的设置

检查这些设置的两种方法如下:

  • manager.areBubblesAllowed()对于“所有对话都可以冒泡”返回 true,否则返回 false
  • notificationChannel.canBubble()如果“冒泡此对话”打开,则返回 true,否则返回 false

在下表中表示出现气泡:

冒泡
这个对话
canBubble()= true
mAllowBubbles=1
不要冒泡
这个对话
canBubble()= false
mAllowBubbles=0
默认
canBubble()= false
mAllowBubbles=-1
所有对话
都可以冒泡
areBubblesAllowed()=true
* *
选定的对话
可以冒泡
areBubblesAllowed()=false
†</td>
没有什么可以冒泡
areBubblesAllowed()=false
†</td>

如果仔细观察,您会发现对于这两种方法的某些组合,您无法判断是否显示了气泡。有问题的案例用 * 和 † 标记。您可以通过查看(另请参见表头)来区分标有 * 的两种情况notificationChannel.mAllowBubbles,但此私有字段无法通过反射访问。

有没有办法解决这个问题并可靠地判断通知是否会冒泡?

4

0 回答 0