【发布时间】:2014-11-26 10:05:42
【问题描述】:
我正在尝试制作一个 android 应用程序来监听 wifi 更改广播并执行一些操作。但问题是当进程被杀死时它不起作用。我发现这个问题说没有活动就无法工作
How to create BroadcastReceiver without Activity/Service?
所以这不是一个选择。因此,我创建了一个空的活动。我不想创建一个在后台运行的服务。我怎样才能让我的应用程序即使在它被杀死时也能继续监听。我已经在清单中注册了广播。
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="com.background.service.BroadCastReceiver">
<intent-filter>
<action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
这是我的课
public class BroadCastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//do some action
}
}
【问题讨论】:
-
服务是为了什么?在 Manifest 中注册就足够了。
-
好吧,当应用程序被杀死时,
onReceive不会被调用 -
@Alex:你如何杀死应用程序?可以提一下步骤吗?
-
“使用预安装的应用程序杀死所有正在运行的进程”——使用更可靠的技术,例如通过 DDMS 终止进程。可能是您的设备正在为这些进程执行强制停止,这将非常愚蠢,但在某些设备上会发生。除此之外,您使用什么来确定您的
BroadCastReceiver是否获得控制权?此外,自安装应用程序以来,您是否至少启动过一次该活动?否则,清单注册的接收器将无法工作(它们处于与强制停止相同的“停止”状态)。 -
我设法找出了为什么以及如何重现我所看到的行为。这是因为我正在调试应用程序。附加调试器后,从概览屏幕中删除应用程序会导致它每次都移动到“强制停止”状态(通过转到“设置”>“应用程序”并看到“强制停止”按钮被禁用来确认)。在模拟器和真实设备中都发生。在不附加调试器的情况下运行应用程序没有问题 :) 希望此信息对某人有所帮助!
标签: android android-intent android-broadcast