android - list 与 Activity 中的广播接收器注册

标签 android android-intent broadcastreceiver intentfilter

我需要一些帮助来了解我的广播接收器何时可以在刚刚在 list 中注册而不是必须从正在运行的 Activity 或服务中注册时工作。

例如,如果我使用以下 Intent 过滤器注册一个独立接收器,它可以在没有服务/Activity 引用的情况下工作:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.blk_burn.standalonereceiver"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="10" />
    <uses-permission android:name="android.permission.WAKE_LOCK"/>

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >

        <receiver android:name="TestReceiver">
            <intent-filter>
                <action android:name="android.media.AUDIO_BECOMING_NOISY"/>
            </intent-filter>
        </receiver>

    </application>

</manifest>

但是,如果我将 android.media.AUDIO_BECOMING_NOISY 替换为 android.intent.action.HEADSET_PLUG,则不会触发接收器 (Android Documentation)

根据我在本网站上找到的信息,您必须从已在运行的 Activity 或服务中注册此接收器才能使其工作 (Post)。

  • 谁能告诉我为什么在 list 中调整您的 Intent 过滤器时这不起作用,以及为什么您需要在后台运行一个引用/注册接收器的服务?

  • 是否有解决方法,以便我可以使用带有 android.intent.action.HEADSET_PLUG 的 Intent 过滤器在我的应用 list 中注册我的接收器?

  • 如何从 android documentation 中识别哪些广播操作?需要让服务或 Activity 注册它们,而不是在 list 中使用正确的过滤器?

最佳答案

如果您的接收器已在 list 中注册,并且您的应用未运行,则会创建一个新进程来处理广播。如果您在代码中注册它,它与您注册它的 Activity/服务的生命周期相关联。对于某些广播,如果它不存在,则创建一个新的应用程序进程实际上没有意义,或者有一些安全性、性能等方面的影响,因此您只能在代码中注册接收器。

至于 HEADSET_PLUG 广播,似乎想法是您已经运行的应用程序可以通过它对 UI、音量等进行特定于应用程序的调整。如果您的应用程序没有运行,您不应该真正关心被拔掉的耳机。

AFAIK,没有为所有广播汇总此信息的单一位置,但每个 Intent 都应在 JavaDoc 中包含有关如何注册和使用它的注释,但显然缺少某些地方。如果您对 Intent.FLAG_RECEIVER_REGISTERED_ONLY 的 Android 源代码树进行 grep,您应该能够编译一个列表。 .

关于android - list 与 Activity 中的广播接收器注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10876015/

相关文章:

android - 华为 map 没有响应 Offstage Flutter

android - FAB 内的中心图像

java - 使用白色图像隐藏 Android Studio 中的所有 textView

android - 如何暂停父 Activity 直到子 Activity 完成

android - 从另一个 Activity 中获取数据

android - 始终使用 BroadcastReceiver 运行服务以进行调用窃听

android - 在 Presenter 类中访问 Actvity 的上下文是一种好习惯吗?如果没有,那么还有其他更好的方法吗?

android - 多次调用的服务自行结束

android - 当 Lollipop 版本的应用程序关闭时,电话状态的 BroadCastReceiver 不起作用

android - AlarmManager.RTC_WAKEUP 没有唤醒设备?