7

私の意図は、AndroidデバイスのUSB /電源ケーブルの現在のステータスを[設定]に保存することです:接続/切断。開発者サイトから、そのステータスを取得するための2つのインテントがあることがわかります:ACTION_POWER_CONNECTED/DISCONNECTED。そのため、Developersで公開されているものと同じコードを使用しました。

http://developer.android.com/training/monitoring-device-state/battery-monitoring.html

セクション「充電状態の変化の監視」を参照してください。

マニフェスト

<receiver android:name=".PowerConnectionReceiver">
  <intent-filter>
    <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
    <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
  </intent-filter>
</receiver>

Javaコード

public class PowerConnectionReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) { 

        int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
        boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
        boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;

        Toast.makeText(context, "pvr = " + usbCharge + ", " + acCharge + "," + isCharging, Toast.LENGTH_SHORT).show();
    }
}

USBケーブルをIN/OUTに差し込むと、ブロードキャストは常に正しく送信され、PowerConnectionReceiverに取り込まれますが、常に同じ結果になります(=ケーブルが差し込まれます)。

Galaxy Nexus 4.1.1 / 4.2.1でテストしました-Toastで常に2xFALSEが発生します(chargePlug = FALSE、usbCharge = FALSE)。

intent.getIntExtra(BatteryManager.EXTRA_PLUGGED、-1)が常にデフォルト値「-1」を返すのはなぜですか?

ありがとうございました。

ps。レシーバーをJavaに登録すると、すべて正常に動作します

Intent intent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

...サービス中またはアクティビティ中。しかし、Android Developersサイトによると、正しい値を返すために上記のコードを作成することは前提条件ではありません。

4

3 に答える 3

2

問題が発生している理由はわかりませんが、私にとっては ACTION_POWER_CONNECTED および ACTION_POWER_DISCONNECTED アクションの登録がうまくいきました。

<receiver android:name="PowerReceiver" >
    <intent-filter>
        <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
        <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
    </intent-filter>
</receiver>

そして、ブロードキャスト レシーバーを次のように実装します。

public class PowerReceiver extends BroadcastReceiver {

    @Override public void onReceive(Context context, Intent intent) {
        if(intent.getAction() == Intent.ACTION_POWER_CONNECTED) {
            //Handle power connected
        } else if(intent.getAction() == Intent.ACTION_POWER_DISCONNECTED){
            //Handle power disconnected
        }
    }
}
于 2013-12-05T06:07:23.020 に答える