【问题标题】:Which Intents/Broadcasts could be "sticky" in Android?哪些意图/广播在 Android 中可能是“粘性的”?
【发布时间】:2021-07-10 11:32:08
【问题描述】:

我在哪里可以找到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_ACTION, Intent.ACTION_POWER_CONNECTED BluetoothDevice.ACTION_ACL_CONNECTED, ... 我知道,有些没有意义,但这些 Intent 的结果是总是null,就算有变化,为什么?

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

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

谢谢。

【问题讨论】:

    标签: android android-intent broadcastreceiver android-broadcast


    【解决方案1】:

    我在哪里可以找到Intent/Broadcast 可以粘贴的信息?

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

    是否存在任何限制或拆分为粘性/非粘性或列出哪些 Intent 具有粘性?

    使用sendStickyBroadcast() 发送粘性广播。从技术上讲,它与特定的 Intent 无关。

    【讨论】:

    • 感谢您的回答。是不是比cs.android.com/search?q=function:sendStickyBroadcast()&sq= 更好的搜索方式?有很多用法。
    • @t0m:其中许多用途是测试代码之类的。我对该站点的选项了解不多,不知道哪种过滤选项可能有用。但是,是的,总的来说,我就是这么想的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 2012-10-26
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多