从BroadcastReceiver通知我的主要活动状态的电源状态变化

时间:2013-03-21 23:31:16

标签: android android-activity broadcastreceiver

我正在构建一个Android自助服务终端应用程序,该应用程序将以24/7的速度运行,用于小型客户端工作,播放视频。但是我发现在某些时候电源可能会消失,这意味着平板电脑需要停止运行应用程序(或至少移除屏幕保持活动状态),当电源熄灭时重新设置设置全部备份电源重新启动,因此它不会完全杀死设备。我以前做过一些Android工作,但没有这样的。鉴于我只有一个活动,并且当我收到状态时,活动将运行来我的广播接收器中的onReceive呼叫(我已经在我的清单文件中注册)对我来说最好的做法/最惯用的方式是什么将更改后的状态传达给我的活动?

我见过的当前方法涉及在活动中公开提供对活动的静态引用,并使用该参数与活动进行通信(根据应用程序的生命周期将其适当地设置为self或null)。这是最有效的方法吗?

2 个答案:

答案 0 :(得分:0)

最简单的方法是创建Observer/Observable模式,BroadcastReceiver实现Observable,并通知所有感兴趣的各方有关更改的信息。对权力变化感兴趣的活动(或其他类)可以注册为Observer,并在发生事件时通过update()函数调用。

请不要忘记取消注册Observer中的onPause(),这样就不会调用您的死活动。

答案 1 :(得分:0)

@Hoan Nguyen是对的。您的活动可以注册电池事件。这是一个例子:

public class Test extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final TextView text = new TextView(this);
        setContentView(text);
        registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
                boolean charging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL;
                text.setText(charging ? "Charging" : "On battery");
            }
        }, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
    }
}

@lenik可能也应该在onResume()/ onPause()而不是onCreate()中注册/取消注册,但上面的内容应该让你开始。