【问题标题】:Can't get charging state无法获得充电状态
【发布时间】:2020-11-05 22:52:06
【问题描述】:

我正在尝试从电池中获取信息。所以我创建了 BroadcastReceiver,在后台读取这些值。我遇到了从电池获取 isCharging 状态的问题。我总是假的。我正在尝试使用此代码:

public class AlertReceiver extends BroadcastReceiver {


@Overrid
public void onReceive(Context context, Intent intent) {

 
    BatteryManager bm = (BatteryManager) context.getSystemService(BATTERY_SERVICE);
    assert bm != null;
    int battery_level = bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);

    IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
    Intent batteryStatus = context.registerReceiver(null, ifilter);

    int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
    boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
            status == BatteryManager.BATTERY_STATUS_FULL;
  }
}

清单

 <receiver android:name=".service.AlertReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
            <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
            <action android:name="BackgroundProcess"/>
        </intent-filter>
    </receiver>

【问题讨论】:

    标签: java android broadcastreceiver batterymanager


    【解决方案1】:

    使用我们的 BroadcastReceiver 实现创建一个内部类:

    private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver() {
                @Override
                public void onReceive(Context ctxt, Intent intent) {
                    int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
                    txvlebtry.setText(String.valueOf(level)+"%" );
                    int health = intent.getIntExtra(BatteryManager.EXTRA_HEALTH, 0);
        
                    if (health == BatteryManager.BATTERY_HEALTH_COLD) {
                        btry_health_val.setText(R.string.cold);
                    }
                    if (health == BatteryManager.BATTERY_HEALTH_DEAD) {
                        btry_health_val.setText(R.string.dead);
                    }
                    if (health == BatteryManager.BATTERY_HEALTH_GOOD) {
                        btry_health_val.setText(R.string.good);
                    }
                    if (health == BatteryManager.BATTERY_HEALTH_OVERHEAT) {
                        btry_health_val.setText(R.string.overheat);
                    }
                    if (health == BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE) {
                        btry_health_val.setText(R.string.overVoltage);
                    }
                    if (health == BatteryManager.BATTERY_HEALTH_UNKNOWN) {
                        btry_health_val.setText(R.string.unknown);
                    }
        
                    int temprature = (intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, 0)) / 10;
                    tempraturebtry_val.setText(temprature + R.string.degreecel);
                    int chargeplug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
        
                    if (chargeplug == BatteryManager.BATTERY_PLUGGED_AC) {
                        chargeplug_val.setText(R.string.acadapter);
                    }
                    if (chargeplug == BatteryManager.BATTERY_PLUGGED_USB) {
                        chargeplug_val.setText(R.string.USB);
                    }
                    if (chargeplug == BatteryManager.BATTERY_PLUGGED_WIRELESS) {
                        chargeplug_val.setText(R.string.Wireless);
                    }
        
                    int status = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
        
                    if (status == BatteryManager.BATTERY_STATUS_CHARGING) {
                        btrystatus_val.setText(R.string.Charging);
                    }
                    if (status == BatteryManager.BATTERY_STATUS_DISCHARGING) {
                        btrystatus_val.setText(R.string.Discharging);
                    }
                    if (status == BatteryManager.BATTERY_STATUS_FULL) {
                        btrystatus_val.setText(R.string.Full);
                    }
                    if (status == BatteryManager.BATTERY_STATUS_NOT_CHARGING) {
                        btrystatus_val.setText(R.string.notchargin);
                    }
                    if (status == BatteryManager.BATTERY_STATUS_UNKNOWN) {
                        btrystatus_val.setText(R.string.unknown);
                    }
        
                }
            };
    

    然后在应用中注册我们的BroadcastReceiver

    protected void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
    .....
    
      this.registerReceiver(this.mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-23
      • 1970-01-01
      • 2020-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      相关资源
      最近更新 更多