すべてのアクティビティに電源の状態に関する知識を持たせたい:充電器が接続されていますか?ACTION_POWER_CONNECTED登録された受信者がまたはを受信するACTION_POWER_DISCONNECTEDと、アクティビティへのコールバックが行われ、登録されたアクティビティに通知されます。アプリケーションの一部であるすべてのアクティビティが必要であり、このコールバックメソッドを使用するため、アクティビティを強制的に実装するインターフェイスを作成しましたpowerDisconnected()。powerConnected();
public interface BrightnessActivityInterface {
void powerDisconnected();
void powerConnected();
}
私のアクティビティはすべて同じタイプのコードを使用しているため(たとえば、接続されている場合は画面がオンで明るいロック、電源が切断されている場合は画面が暗くなる)、を拡張しclass Activityて実装しましたBrightnessActivityInterface:
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);
}
私のすべてのアクティビティは、ActivityではなくこのBrightnessActivityを拡張します。これまでのところすべて良さそうですか?
問題は、私が開始する最初のアクティビティです。行の直後にnullpointerが表示されます。
registerReceiver(chargingOn, new IntentFilter(Intent.ACTION_POWER_CONNECTED));
'this'には値があり(これは私の起動アクティビティです)、chargeingOnはChargingOnReceiverです。ソースをインストールしましたが、何を見ているのかわかりません。
私のクラスにはに登録する権利があり、Activityの代わりにACTION_POWER_CONNECTEDすべてのクラスを派生させるまでは正常に機能しました。BrightnessActivityご意見をお聞かせください。