2012-07-22 28 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(); 
} 

Manifest:tình trạng pin luôn không sạc

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

Trong mã này, Toast luôn luôn hiển thị "Không sạc!". Tôi đã thử nghiệm điều này trên một thiết bị thực tế, và khi tôi cắm nó vào nguồn AC hoặc USB, nó vẫn hiển thị "Không sạc!" Bánh mì nướng.

+0

theres một cái gì đó sai với intent.getIntExtra của bạn, kiểm tra nơi phương pháp này đang được gọi và đảm bảo rằng bạn đang thiết lập ý định với thông số chính xác – John

+0

Trạng thái bạn đang nhận được là gì? – zmbq

+0

@ John Tôi đang sử dụng nó trong tệp kê khai của mình. –

Trả lời

6

Bạn không thể đăng ký ACTION_BATTERY_CHANGED qua tệp kê khai, do đó bạn không nhận được các chương trình phát sóng đó. Bạn đang cố gắng nhận các khoản phí bổ sung BatteryManager từ Intents không có các tính năng bổ sung đó (ví dụ: ACTION_POWER_CONNECTED). Kết quả là, bạn đang nhận được giá trị mặc định là BATTERY_STATUS_UNKNOWN.

+0

Vậy làm cách nào để đăng ký chương trình? –

+0

@MohitDeshpande: Gọi 'registerReceiver()', giống như cách bạn sẽ đăng ký bất kỳ chương trình 'BroadcastReceiver' nào khác theo chương trình. Xem: https://github.com/commonsguy/cw-omnibus/tree/master/SystemEvents/OnBattery – CommonsWare

2

Hãy thử như sau:

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

'tình trạng' bây giờ sẽ là một giá trị từ 1 đến 5:

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

Mã của bạn:

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

có thể được viết:

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

Cả hai đều giống hệt nhau vì BatteryManager.BATTERY_STATUS_CHARGING là một hằng số mà luôn bằng 2, và BatteryManager.BATTERY_STATUS_FULL là một hằng số mà luôn bằng 5.

+0

Câu trả lời hay, nhưng vui lòng không sử dụng số ma thuật trong mã: http://stackoverflow.com/questions/47882/what -n-a-ma thuật-số-và-tại sao-là-nó-xấu – kellogs

Các vấn đề liên quan