Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.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
Java 电池状态始终不充电_Java_Android_Status_Power Management - Fatal编程技术网

Java 电池状态始终不充电

Java 电池状态始终不充电,java,android,status,power-management,Java,Android,Status,Power Management,舱单: @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

舱单:

@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();
}


在这段代码中,土司总是显示“不收费!”。我在一台实际的设备上测试了这一点,当我将其插入交流或USB电源时,它仍然显示“不充电!”吐司。

您无法通过清单注册
操作\u电池\u更改
,因此您没有收到这些广播。您正试图从
意图
获取未连接这些额外功能的
电池管理器
额外功能(例如,
操作电源
)。因此,您将获得电池状态未知的默认值,请尝试以下操作:

<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>
“状态”现在将是介于1和5之间的值:

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

1 = Unknown
2 = Charging
3 = Discharging
4 = Not Charging
5 = Full
可以这样写:

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

两者都是相同的,因为BatteryManager.BATTERY_STATUS_CHARGING是一个始终等于2的常数,BatteryManager.BATTERY_STATUS_FULL是一个始终等于5的常数。

您的意图有问题。getIntExtra,检查调用此方法的位置,并确保使用正确的参数设置intent。您获得的状态是什么?@John我正在清单中使用它。@zmbq我拔出时得到1,插入时得到1。那么如何以编程方式注册它?@MohitDeshpande:Call
registerReceiver()
,与以编程方式注册任何其他
BroadcastReceiver
的方式相同。请参阅:答案很好,但请不要在代码中使用幻数:
if (status == 2 || status == 5) ...