2012-07-22 185 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> 

在这段代码,面包总是显示 “不在充电!”。我在一台实际的设备上测试过,当我插入交流电或USB电源时,它仍然显示“不充电!”吐司。

+0

那里有什么问题你intent.getIntExtra,检查其中这些方法正在被呼叫,并确保你正在设置意图的正确参数 – John 2012-07-22 18:24:22

+0

你的地位是什么? – zmbq 2012-07-22 18:24:53

+0

@John我在清单中使用它。 – 2012-07-22 18:28:48

回答

6

您无法通过清单注册ACTION_BATTERY_CHANGED,因此您没有收到这些广播。您正在尝试从Intents获得BatteryManager临时演员中没有这些演员的演员(例如,ACTION_POWER_CONNECTED)。因此,您将获得默认值BATTERY_STATUS_UNKNOWN

+0

那么我将如何注册它编程? – 2012-07-22 18:33:34

+0

@MohitDeshpande:调用'registerReceiver()',就像您以编程方式注册任何其他的'BroadcastReceiver'一样。请参阅:https://github.com/commonsguy/cw-omnibus/tree/master/SystemEvents/OnBattery – CommonsWare 2012-07-22 18:35:59

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-魔号和 - 为什么 - 是 - 它坏 – kellogs 2017-01-20 13:13:49