Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何获取当前电池百分比?_Android_Broadcastreceiver_Batterylevel - Fatal编程技术网

Android 如何获取当前电池百分比?

Android 如何获取当前电池百分比?,android,broadcastreceiver,batterylevel,Android,Broadcastreceiver,Batterylevel,我正在创建一个电池监视器应用程序,并试图显示当前的电池百分比。我有一个广播接收器,正在收听 <action android:name="android.intent.action.BATTERY_CHANGED" /> 出于某种原因,结果总是当前电池电量:1.0%…我哪里出了问题 编辑: 收件人在舱单中注册为 <receiver android:name=".PowerMonitorReceiver"> <intent-filter>

我正在创建一个电池监视器应用程序,并试图显示当前的电池百分比。我有一个广播接收器,正在收听

<action android:name="android.intent.action.BATTERY_CHANGED" />
出于某种原因,结果总是当前电池电量:1.0%…我哪里出了问题

编辑:

收件人在舱单中注册为

<receiver android:name=".PowerMonitorReceiver">
    <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_LOW" />
        <action android:name="android.intent.action.BATTERY_OKAY" />
        <action android:name="android.intent.action.BATTERY_CHANGED" />
    </intent-filter>
</receiver>

由于您正在收听多个广播,因此需要确定它是哪种类型的广播

String action = intent.getAction();

if(action.equals(Intent.ACTION_BATTERY_CHANGED)){
    int level   = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
    int scale   = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100);
    int percent = (level*100)/scale;

    Toast.makeText(context, "Current battery level: " + percent + "%", Toast.LENGTH_SHORT).show();
}

我认为已经很晚了,但解决办法很简单。根据,如果您已在xml中注册广播接收器,则不会收到已更改电池的更新,因为它是粘性广播

您需要在java程序中注册Broadcastreceivers,如下所示

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

int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
float batteryPct = (level * 100) / (float)scale;
注意:即使将null作为接收器传递,您仍然可以接收所有必需的电池数据。您还可以传递一个Receiver类而不是null来进行连续监视,但请注意,这会耗尽设备的电池,因为这些广播经常被抛出

boolean acCharge = false;
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = registerReceiver(null, ifilter);
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
        status == BatteryManager.BATTERY_STATUS_FULL;

if(isCharging){
        chargePercentage = 
        batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
    }

chargePercentage变量将为您提供当前的收费百分比。

将您的收件人和您注册的地址发送出去,这肯定会有所帮助。这将触发并适用于所有其他触发器。但换过的电池从未被调用过。我已经在物理设备和Genymotion模拟器上用电池模拟了不同的事件。
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);

int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
float batteryPct = (level * 100) / (float)scale;
boolean acCharge = false;
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = registerReceiver(null, ifilter);
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
        status == BatteryManager.BATTERY_STATUS_FULL;

if(isCharging){
        chargePercentage = 
        batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
    }