如何使用BroadcastReceiver更新两个活动?

时间:2011-04-28 00:40:34

标签: android broadcastreceiver

我有一个只有两个活动的应用程序,主要活动和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

3 个答案:

答案 0 :(得分:0)

我建议在清单中注册接收器并使用它来更改存储在首选项文件中的变量(无论应用程序是否正在运行),然后在需要时查询状态首选项。

但您可以扩展Application并在Application.onCreate()方法的代码中注册接收器。

答案 1 :(得分:0)

registerReceiver(receiver, intentFilter); should be in some method.

melsBigListener应扩展活动,或者您需要将Activity Context传递给此类并将其用于registerReceiver。

最好在menifest文件中编写寄存器接收器,而不是做这些愚蠢的事情。

答案 2 :(得分:0)

BroadcastReceivers应该作为使用清单文件注册到手机的扩展类。我不太确定它如何作为活动中的实例化类工作。到目前为止,通过您的代码判断,Activity和BigListener类甚至都不会接收到intent,因为从未在清单中声明了intent过滤器。

解决您的问题: 1.创建一个myBroadcastReceiver,从BroadcastReceiver扩展,在清单中声明必要的意图 2.创建一个myApplication,从Application扩展 3.通过切换myApplication中的变量,使用您的活动'onCreate,onDestroy,onStartCmd,onPause等来管理“仅在应用程序处于活动状态时”部分。 4.每当收到意图时,使用myBroadcastReceiver读取(3)中的变量,以决定是否“需要更新某些变量”并相应地更新。由于这些变量由您的2个活动共享,因此变量应放在myApplication类