当前位置: 首页 > 知识库问答 >
问题:

清单中的广播接收器寄存器与活动

卫阳曜
2023-03-14

我需要一些帮助来理解当我可以期望我的广播接收器在清单中注册时工作,而不是必须从正在运行的活动或服务中注册。

因此,例如,如果我用以下意图筛选器注册了一个独立的接收器,那么它在没有对它的服务/活动引用的情况下就能正常工作:

<?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文档)

从我在这个站点上发现的,你必须从一个已经运行的活动或服务中注册这个接收器,以使其工作(Post)。

>

  • 有人能告诉我,为什么在调整清单中的意图筛选器时这不起作用,为什么需要在后台运行一个引用/注册接收者的服务?

    是否有一种方法,使我可以使用android.intent.action.headset_plug的意图筛选器在应用程序的清单中注册接收器?

  • 共有1个答案

    廖夜洛
    2023-03-14

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

    至于headset_plug广播,似乎是想让你已经运行的应用程序可以通过这个来对UI、音量等进行应用程序特定的调整。如果你的应用程序没有运行,你就不应该真的关心耳机被拔掉了。

    AFAIK,对于所有广播,没有一个单独的地方总结了这个信息,但是每个意图都应该在JavaDoc中有一个关于如何注册和使用它的注释,但是显然它在某些地方是缺乏的。如果您将Android源代码树grep为intent.flag_receiver_registered_only,那么您应该能够编译一个列表。

     类似资料:
    • 根据谷歌提供的AndroidO迁移指南,大部分隐含的广播意图不应该在清单中注册(除了这里发现的一些例外),但显式广播意图保持不变。 我们希望将任何需要的广播从舱单上移开。但我们如何识别接收者是否是隐性的呢?有一般规则吗? 下面是我们在清单中注册的广播示例。我们是否应该只查看“action”标记,并查看它是否被列入白名单以将其保留在清单中? 例如,“com.android.vending.INSTA

    • 我目前正在使用SharedReferences跟踪通过AlarmManager启动的BroadcastReceiver中要执行工作的项列表。除了一个特定的场景外,一切都很好。当我触发一个新项目来执行工作时,让它完成工作,然后删除该项目(全部通过SharedReferences编辑),它在应用程序运行时工作得很好。当列表中没有任何内容,我打开任务管理器并终止应用程序时,该项突然出现在Broadcas

    • 问题内容: 有人可以解释和之间的确切区别吗? 在什么情况下我们必须使用每个Receiver类? 问题答案: 和之间只有一个区别。 当您收到内部广播方法时, 假设, BroadcastReceiver : 它 不保证 该 CPU将保持清醒 ,如果你启动一些长时间运行的进程。CPU可能会立即回到睡眠状态。 WakefulBroadcastReceiver : 这是 保证 该 CPU将保持清醒 ,直到你

    • 本文向大家介绍Android中的广播和广播接收器代码实例,包括了Android中的广播和广播接收器代码实例的使用技巧和注意事项,需要的朋友参考一下 BroadcastReceiver不仅可以接收系统广播,也可接收自定义的广播   1.定义一个广播接收器   2.发送广播,定义好action标志,用Intent发送 3.注册只接收指定action的广播接收器 4.取消该广播接收器

    • 我试图检测收到的短信,并通过阅读。 当我在中声明广播接收器时,它不工作。但在活动中动态完成时,它可以工作。 我知道,当在清单中声明时,某些广播操作无法在接收器中捕获,并且需要一个活动(如本文所述),但我见过有人在清单中使用RECEIVE_SMS,如本文所述。 我不知道我做错了什么。任何帮助将不胜感激! AndroidManifest。xml 斯姆斯林纳。JAVA 主要活动。JAVA

    • 4.2.1.3 内部广播接收器 内部广播接收器是广播接收器,它将永远不会收到从内部应用以外发送的任何广播。 它由几个内部应用组成,用于保护内部应用处理的信息或功能。 要点(接收广播): 定义内部签名权限来接收广播。 声明使用内部签名权限来接收结果。 将导出属性显式设置为true。 需要静态广播接收器定义的内部签名权限。 需要内部签名来注册动态广播接收器。 确认内部签名权限是由内部应用定义的。 尽管