2012-07-22 5 views
5
@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電源に接続すると、まだ「充電していません!」と表示されます。トースト。

+0

に等しいという一定であることは、あなたのintent.getIntExtraと間違って何かをtheresの、どここの方法確認することを一定であるため、両方が同一であり、から呼び出され、正しいパラメータでインテントを設定していることを確認してください – John

+0

ステータスはどうなっていますか? – zmbq

+0

@ジョン私はマニフェストで使用しています。 –

答えて

6

マニフェスト経由でACTION_BATTERY_CHANGEDに登録することはできません。そのため、これらのブロードキャストは受信されません。これらのエキストラを持たないIntentsBatteryManagerエキストラを取得しようとしています(例:ACTION_POWER_CONNECTED)。結果として、デフォルト値のBATTERY_STATUS_UNKNOWNが得られます。

+0

どうすればプログラムで登録できますか? –

+0

@MohitDeshpande:プログラムで他の 'BroadcastReceiver'を登録するのと同じ方法で' registerReceiver() 'を呼び出します。参照:https://github.com/commonsguy/cw-omnibus/tree/master/SystemEvents/OnBattery – CommonsWare

2

は、以下のことを試してみてください。

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

'ステータスは' 今、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.

+0

丁寧な回答ですが、コードにマジックナンバーを使用しないでください。http://stackoverflow.com/questions/47882/what -is-a-magic-number-and-why-it-bad – kellogs

関連する問題