我希望我的所有活动都了解电源状态:是否连接了充电器?当注册的接收者收到ACTION_POWER_CONNECTED
或ACTION_POWER_DISCONNECTED
时,对该活动进行回叫以通知已注册的活动。由于我想要所有属于应用程序的活动,并且我使用此回调方法,因此我创建了一个界面,强制活动实现powerDisconnected()
和powerConnected();
public interface BrightnessActivityInterface {
void powerDisconnected();
void powerConnected();
}
因为我的活动都使用相同类型的代码(例如,连接时屏幕亮和亮锁,断电时屏幕变暗)我扩展了class Activity
并实现了BrightnessActivityInterface
:< / p>
public class BrightnessActivity extends Activity implements BrightnessActivityInterface {
private ChargingOffReceiver chargingOff;
private ChargingOnReceiver chargingOn;
public BrightnessActivity(){
chargingOn = new ChargingOnReceiver(this);
registerReceiver(chargingOn, new IntentFilter(Intent.ACTION_POWER_CONNECTED));
chargingOff = new ChargingOffReceiver(this);
registerReceiver(chargingOff, new IntentFilter(Intent.ACTION_POWER_DISCONNECTED));
}
@Override
public void onResume() {
super.onResume();
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD + WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON + WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
}
@Override
public void onPause() {
super.onPause();
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
public void powerDisconnected() {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
public void powerConnected() {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON + WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
}
我的所有活动现在扩展了此BrightnessActivity而不是Activity。到目前为止听起来都不错?
问题是我开始的第一个活动我在行
之后得到一个nullpointer registerReceiver(chargingOn, new IntentFilter(Intent.ACTION_POWER_CONNECTED));
'this'有一个值(这是我的启动活动),chargingOn是一个ChargingOnReceiver。我安装了源码,但我不知道我在看什么。
我的班级有权注册ACTION_POWER_CONNECTED
,并且一直工作正常,直到我从BrightnessActivity
而不是活动派生所有班级。请指教。
答案 0 :(得分:1)
您不应覆盖默认的Activity构造函数。移动代码以覆盖onCreate()方法。
答案 1 :(得分:0)
您应该在onCreate
注册接收者,并在onPause
“您可以使用动态注册此类的实例 Context.registerReceiver()或静态发布实现 通过AndroidManifest.xml中的标记。注意:如果注册了 您应该在Activity.onResume()实现中使用接收器 在Activity.onPause()中取消注册它。 (你什么时候不会收到意图 暂停,这将减少不必要的系统开销。不要 在Activity.onSaveInstanceState()中取消注册。“
如果你不理解为什么你的Activity在构造函数之后没有处于'ready'状态,你需要在Activity Lifecycle上阅读