【问题标题】:Informing my main Activity of changes in power state from a BroadcastReceiver从广播接收器通知我的主要活动电源状态的变化
【发布时间】:2013-03-21 23:31:16
【问题描述】:

我正在构建一个 Android 信息亭应用程序,该应用程序几乎可以 24/7 全天候运行,用于播放视频的小型客户端工作。但是我发现在某些时候电源可能会关闭,这意味着平板电脑需要在断电时停止运行应用程序(或至少移除屏幕保持活动状态),并在断电时重新设置所有设置。电源重新打开,因此它不会完全杀死设备。我以前做过一些 Android 工作,但没有像这样。鉴于我只有一个活动,并且当我收到状态时,活动将运行到我的广播接收器中的 onReceive 调用(我已经在我的清单文件中注册)什么是最佳实践/最惯用的方式对我来说将更改后的状态传达给我的 Activity?

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

【问题讨论】:

  • 你为什么不在你的活动中注册权力?

标签: android android-activity broadcastreceiver


【解决方案1】:

最简单的方法是创建Observer/Observable 模式,其中您的BroadcastReceiver 实现Observable,并通知所有相关方有关更改。对电源更改感兴趣的活动(或其他类)可以注册为Observer,并在发生某些事情时通过其update() 函数调用。

别忘了在onPause() 中取消注册Observer,这样你的死活动就不会被调用。

【讨论】:

    【解决方案2】:

    @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() 中注册/取消注册,但以上内容应该可以帮助您入门。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多