すべてのアクティビティに電源の状態に関する知識を持たせたい:充電器が接続されていますか?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
ご意見をお聞かせください。