我有一个应用程序,它只有两个活动,即主活动和一个PreferenceActivity。当状态发生变化时(飞机模式打开或关闭,GPS打开和关闭等),我想要更新这两个活动。
只有当应用程序处于活动状态时,我才需要更新一些变量和UI,所以我想最好是在代码中注册接收器,而不是在应用程序清单中。
因为我不想在每个活动中复制代码,所以我尝试将BroadcastReceiver放在它自己的类中。但是,我发现我无法注册BroadcastReceiver。有没有办法绕过这个问题?
谢谢你,梅尔
public class melsBigListener {
IntentFilter intentFilter = new IntentFilter("android.intent.action.SERVICE_STATE");
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//TO DO Update both my main activity and the preference activity
//TO DO deal with different intents via switch statement...
}
};
//registering as receiver(like below) can not work
//registerReceiver(receiver, intentFilter);}Relevant post:RegisterBroadcastReceiver in Manifest.xml setting or by implement source code
发布于 2011-04-28 08:57:10
我建议在清单中注册接收器,并使用它来更改存储在首选项文件中的变量(无论应用程序是否正在运行),然后在需要时查询状态的首选项。
但是您可以扩展Application并在Application.onCreate()方法的代码中注册接收器。
发布于 2011-04-28 09:13:11
registerReceiver(receiver, intentFilter); should be in some method.melsBigListener应该扩展activity,或者您需要将Activity Context传递给这个类并将其用于registerReceiver。
与其做这些愚蠢的事情,不如在menifest文件中编写注册接收器。
发布于 2011-04-28 11:08:12
BroadcastReceivers应作为使用清单文件注册到电话的扩展类工作。我不太确定它作为activity中的实例化类是如何工作的。从到目前为止的代码判断,意图甚至永远不会被活动和BigListener类接收到,因为意图过滤器从未在清单中声明过。
要解决您的问题: 1.创建一个myBroadcastReceiver,从BroadcastReceiver扩展,在清单中声明必要的意图2.创建一个myApplication,从应用程序扩展3.使用您的活动的onCreate,onDestroy,onStartCmd,onPause等来管理“仅当应用程序处于活动状态时”部分,方法是在myApplication中切换一个变量。4.每当接收到意图时,使用myBroadcastReceiver读出(3)中的变量,以决定是否“需要更新一些变量”并进行相应的更新。由于这些变量由您的两个活动共享,因此应将这些变量放入myApplication类中
https://stackoverflow.com/questions/5812338
复制相似问题