6
@Override
public void onReceive(Context context, Intent intent) {
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS,
    BatteryManager.BATTERY_STATUS_UNKNOWN);

    if (status == BatteryManager.BATTERY_STATUS_CHARGING
        || status == BatteryManager.BATTERY_STATUS_FULL)
        Toast.makeText(context, "Charging!", Toast.LENGTH_SHORT).show();
    else
        Toast.makeText(context, "Not Charging!", Toast.LENGTH_SHORT).show();
}

マニフェスト:

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

このコードでは、トーストは常に「充電されていません!」と表示されます。これを実際のデバイスでテストしましたが、ACまたはUSB電源に接続しても、「充電されていません」と表示されます。トースト。

4

2 に答える 2

6

ACTION_BATTERY_CHANGEDマニフェストを介して登録することはできないため、これらのブロードキャストは受信されません。あなたはそれらのエクストラを持っていないものBatteryManagerからエクストラを取得しようとしています(例えば)。その結果、デフォルト値の。が取得されます。IntentsACTION_POWER_CONNECTEDBATTERY_STATUS_UNKNOWN

于 2012-07-22T18:32:50.477 に答える
3

次のことを試してください。

IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);

'status'は1から5の間の値になります:

1 = Unknown
2 = Charging
3 = Discharging
4 = Not Charging
5 = Full

あなたのコード:

if (status == BatteryManager.BATTERY_STATUS_CHARGING
    || status == BatteryManager.BATTERY_STATUS_FULL) ...

書くことができます:

if (status == 2 || status == 5) ...

BatteryManager.BATTERY_STATUS_CHARGINGは常に2に等しい定数であり、BatteryManager.BATTERY_STATUS_FULLは常に5に等しい定数であるため、両方とも同じです。

于 2013-01-07T18:38:19.753 に答える