哪个 Intents/Broadcasts 可能是 Android 中的 "sticky"?

Which Intents/Broadcasts could be "sticky" in Android?

哪里可以找到Intent/Broadcast可以置顶的资料?

通过操作系统发送的粘性广播示例是 ACTION_BATTERY_CHANGED。当我用 null BroadcastReceiver 为那个动作调用 registerReceiver() 时——我得到了那个动作最后广播的 Intent

每当我找到最后一个值时:

//In Activity
val batteryIntent = registerReceiver(null, IntentFilter(Intent.ACTION_BATTERY_CHANGED)); //sticky
val level = batteryIntent?.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
val scale = batteryIntent?.getIntExtra(BatteryManager.EXTRA_SCALE, -1);

此 Intent:AudioManager.ACTION_HEADSET_PLUG 也有效,但有些 Intent 无效:LocationManager.MODE_CHANGED_ACTIONIntent.ACTION_POWER_CONNECTED BluetoothDevice.ACTION_ACL_CONNECTED、...我知道,有些无效没有意义,但这些 Intent 的结果总是 null,即使发生了变化,为什么?

对于ACTION_BATTERY_CHANGED,文档中有信息:“这是一个粘性广播……”,但对于ACTION_HEADSET_PLUG,则没有。

是否存在任何限制或拆分为粘性/非粘性或列出哪些 Intent 作为粘性工作?
为什么有些 Intent 有效而有些无效?

谢谢。

Where can I find information which Intent/Broadcast can be sticky?

查看感兴趣的 Android 版本的源代码,搜索 sendStickyBroadcast().

Is exist any restriction or split to sticky / non-sticky or list which Intents work as sticky?

使用 sendStickyBroadcast() 发送粘性广播。从技术上讲,它不依赖于特定的 Intent.