2013-03-21 32 views
0

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

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

+0

你为什么不在你的活动中注册权力? – 2013-03-21 23:41:36

回答

0

最简单的方法是创建Observer/Observable模式,其中BroadcastReceiver实现Observable,并通知所有相关方有关更改。对功率变化感兴趣的活动(或其他课程)可以注册为Observer,并在出现问题时通过其update()函数进行调用。

只是不要忘记从Observer取消注册onPause(),所以你的死亡活动不会被调用。

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(),但上面的应该让你开始。