首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android BatteryManager没有报告正确的充电状态

Android BatteryManager没有报告正确的充电状态
EN

Stack Overflow用户
提问于 2013-12-18 16:30:09
回答 2查看 2.1K关注 0票数 2

我很难弄清楚一个设备是否充电,但只在一些设备上。,即索尼Xperia和Xperia。

电池状态总是报告手机已断电。我已经在三星的Galaxy S4和GalaxyS2上测试过这个应用程序,它在这些应用上正确工作。

我有一个BroadcastReceiver,PowerConnectionReceiver,它在清单中注册以接收插入/插入事件。当接收器获得一个意图时,它调用另一个意图获取当前的电池状态:

代码语言:javascript
复制
@Override
public void onReceive(Context c, Intent intent) {
    Context context = c.getApplicationContext();


    try{

        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;

        int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
        usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
        acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;

        Toast.makeText(context, "Battery charging " + isCharging , Toast.LENGTH_SHORT).show();

        } catch (Exception e) {
        Log.e(TAG, e.toString());
        }

有人能在代码中看到明显的缺陷吗?我很困惑。我试过的索尼Xperia Z(它不能正常工作)和我试过的三星Galaxy S4都在运行Android4.2。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-18 17:41:56

有人能在代码中看到明显的缺陷吗?

您假设ACTION_BATTERY_CHANGED已经广播,反映了新的充电状态,然后再广播您正在收听的任何广播(“插入/插入事件”)。我不知道这是一项要求。如果设备在ACTION_BATTERY_CHANGED之前发送“插入/插入事件”,您的代码将在“插入/插入事件”之前看到最后一个ACTION_BATTERY_CHANGED

票数 1
EN

Stack Overflow用户

发布于 2013-12-18 16:38:47

在您的代码中有:

代码语言:javascript
复制
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING;

在try块中,然后当您记录输出时,它位于try块之外:

代码语言:javascript
复制
Toast.makeText(context, "Battery charging " + isCharging , Toast.LENGTH_SHORT).show();

尝试将您的祝酒词放在您的Try块中,或者扩展isCharging的范围:

代码语言:javascript
复制
public boolean isCharging;

public void method()
{
    try
    {
        ...
        isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING;
    }catch(Exception e){...}
    Toast.makeText(context, "Battery charging " + isCharging , Toast.LENGTH_SHORT).show();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20663403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档