android - 如何可靠地判断 Android 通知是否可以显示气泡?
问题描述
在 Android 11 上,基本上有两层气泡设置:
每个应用程序设置:
- 所有对话都会冒泡
- 选定的对话可以冒泡(默认)
- 没有什么可以冒泡
每次对话设置
- 冒泡此对话
- 不要冒泡这个对话
- 默认(您无法直接设置此选项,因为该设置显示为切换;但是每个对话都以此选项开始,您可以通过转到通知设置 -> 气泡并按 × 来重置此选项)
它们以下列方式相互作用:
- 如果所有对话都可以冒泡,请将此对话冒泡,除非将其设置为不冒泡(设置屏幕会显示:“所有对话都可以冒泡,除了:Foo”)
- 如果所选对话可以冒泡,仅当此对话设置为冒泡时才会冒泡
- 如果没有任何东西可以冒泡,请忽略每次对话的设置
检查这些设置的两种方法如下:
manager.areBubblesAllowed()
对于“所有对话都可以冒泡”返回 true,否则返回 falsenotificationChannel.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
,但此私有字段无法通过反射访问。
有没有办法解决这个问题并可靠地判断通知是否会冒泡?
解决方案
推荐阅读
- python - 为什么我的蒙特卡洛模拟中的迭代不总计?
- docker - 在 Synology 上使用 Docker 在 Confluence 上启用 SSL
- modelica - Modelica 中的温差量未按预期运行
- javascript - 递归方法转换,直到数组耗尽
- java - 计算可滚动视图上具有特定资源 ID 的所有元素
- java - 如何解析十六进制 iso8583 行?
- matrix - 带凿子的矩阵乘法器
- python - AttributeError:模块“unittest”没有属性“Testcase”
- python - 使用 matplotlib 绘制矩形长方体
- android - 如何检查更改集合?