4

ユーザーが充電のためにデバイスを接続 (または取り外し) したことを検出しようとしています。プラグインされているかどうかを判断する受信機では、常に「誤った」ステータスの読み取り値が表示されます。これが私のコードです:

(マニフェスト内):

<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>

PowerConnectionReceiver クラスは次のとおりです。

public class PowerConnectionReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
        boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                             status == BatteryManager.BATTERY_STATUS_FULL;

        Log.d("Battery", "Plugged In: " + String.valueOf(isCharging));
        Log.d("Battery", "status: " + String.valueOf(status));
    }
}

何が機能しているか: 電話が接続されている場合、PowerConnectionReceiver が適切に呼び出されます。

ただし、ステータスを出力すると、常に -1 (入力したデフォルト値) が返されます。BatteryManager.EXTRA_STATUS が正しく入っていないようです。

参考までに、これらのログが出力しているものは次のとおりです。

"Plugged In: false"
"status: -1"

詳細な参照 - これは私がこれに使用している開発者サイトのページです: http://developer.android.com/training/monitoring-device-state/battery-monitoring.html

4

2 に答える 2