如何创建不需要Activity/Service的广播接收器?

5
我正在尝试创建没有活动/服务的BroadcastReceiver。虽然在代码中有活动时注册和执行代码没有问题,但是当我删除活动时它会失败。
我确实使用清单文件注册了BroadcastReceiver,但在从项目中删除活动时仍未被调用。
<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <receiver android:name="com.ge.test.InstallsListener" >
        <intent-filter>
            <data android:scheme="package" />
            <action android:name="android.intent.action.PACKAGE_ADDED" android:priority="100"/>                
        </intent-filter>
    </receiver>
</application>

感谢您的选择。

在 Activity 被销毁之前,您必须取消注册接收器。因此,我认为您不能仅在清单中声明接收器。 - Christophe Longeanie
请仔细阅读此链接:http://developer.android.com/guide/components/fundamentals.html - Dixit Patel
1
@ChristopheLongeanie:你完全可以在清单文件中注册一个BroadcastReceiver,并且“仅仅”在清单文件中注册。 - CommonsWare
@DixitPatel - 我已经阅读了,但它并没有告诉我问题的具体情况。你有看过吗? - Eden
抱歉——我误解了你的“已删除”声明。我已经发布了一个更好的答案。 - CommonsWare
1个回答

11

但是当活动从项目中删除时,它不会被调用。

在Android 3.1及更高版本中,用户必须先启动您的一个活动,才能使任何已在清单中注册的BroadcastReceiver起作用。

请参见Android 3.1发布说明,特别是"已停止应用程序上的启动控件"部分。


谢谢,那可能是这样的。所以我需要启动一个服务才能让它工作吗?(我的应用程序不需要用户界面) - Eden
@Eden:“所以我必须启动一个服务才能让它工作吗?”——唔,除非您的设备上有其他应用程序知道如何启动它,否则不会有任何东西可用来启动您的服务。“我的应用程序不需要UI”——很可能,您需要它来启用此BroadcastReceiver。除此之外,您需要允许用户控制后台工作的行为,您需要向他们显示许可协议、文档、技术支持联系信息等等。 - CommonsWare
@CommonWare:感谢您的帮助。这正是我所需要的信息。然而,您对于应用程序的定义有些局限,或者说您并不了解我需要安装应用程序的场景。 不过,不用详细说明,这个应用程序是为一家有25名员工的公司开发的。因此,无需许可协议、联系信息或任何类型的用户界面。 - Eden
@Bruce 正确,尽管在设置中的按钮标签为“强制停止”,至少在英语设备上是这样。我们倾向于使用“强制关闭”来指代应用程序崩溃。 - CommonsWare
1
@Bruce:从概览屏幕中删除任务可能会导致进程终止,但这不应影响清单注册的接收器。进程终止将消除通过registerReceiver()注册的接收器。如果您在此领域有进一步疑虑,建议您提出一个单独的Stack Overflow问题。 - CommonsWare
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接