电池管理器未收到 BATTERY PLUGGED AC in

Posted

技术标签:

【中文标题】电池管理器未收到 BATTERY PLUGGED AC in【英文标题】:Battery Manager not receiving BATTERY_PLUGGED_AC int 【发布时间】:2012-02-27 17:53:03 【问题描述】:

我有一个电池小部件,但由于某种原因,当手机插入交流电时,它没有收到 BATTERY_PLIGGED_AC 整数。

我有另一个用于BATTERY_PLUGGED_USB 的小部件,它工作得很好。

我看不出我的代码有什么问题:

public void onReceive(Context context, Intent intent) 
    status = intent.getIntExtra("status", BatteryManager.BATTERY_STATUS_UNKNOWN);
    batterylevel = intent.getIntExtra("level", 0); 

    updateAppWidget(context);


public void updateAppWidget(Context context)
    RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.androidbatterywidget_layout);
    updateViews.setTextViewText(R.id.textView1, "      " + batterylevel + "%");

    if (status == BatteryManager.BATTERY_PLUGGED_USB)
        updateViews.setImageViewResource(R.id.imageView2, R.drawable.usb);
    else if (status == BatteryManager.BATTERY_PLUGGED_AC)
        updateViews.setImageViewResource(R.id.imageView2, R.drawable.bolt);
    else 
        updateViews.setImageViewResource(R.id.imageView2, R.drawable.empty);

希望有人能够发现我做错了什么。谢谢!

【问题讨论】:

您好,找到了解决方法。写了一篇文章来回答我自己的问题,但作为堆栈溢出的初学者,我必须等待 8 小时才能回答我自己的问题。我已经保存了我的答案并将在 8 小时内发布它,以防将来人们遇到同样的问题。我不得不承认它很奇怪! 【参考方案1】:

想了个办法。很抱歉这篇文章我自己应该多看一会儿。如果人们似乎有同样的问题,以供将来参考,在我看来,USB 值与 BatteryManager.BATTERY_STATUS_UNKNOWN 捆绑在一起,而不是 AC。因此,我所做的只是为 BatteryManager.BATTERY_PLUGGED_AC 变量的值分配一个新的私有 int 充电。如果这是真的(并且设备正在通过 AC 充电),那么该值为 1,所以我只需将之前的 if 语句替换为

if (charging == 1)
        updateViews.setImageViewResource(R.id.imageView2, R.drawable.bolt); 

现在代码读取;

 private int batterylevel = 0;
 private int status;
 private int charging;
   private BroadcastReceiver myReceiver = new BroadcastReceiver()
   

   public void onReceive(Context context, Intent intent)
   

     status = intent.getIntExtra("status", BatteryManager.BATTERY_HEALTH_UNKNOWN);
     charging = intent.getIntExtra("plugged", BatteryManager.BATTERY_PLUGGED_AC);
     batterylevel = intent.getIntExtra("level", 0); 

     updateAppWidget(context);

   


   public void updateAppWidget(Context context)
    RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.androidbatterywidget_layout);
    updateViews.setTextViewText(R.id.textView1, "      " + batterylevel + "%");

    if (charging == 1)
        updateViews.setImageViewResource(R.id.imageView2, R.drawable.bolt); 
    else if (status == BatteryManager.BATTERY_PLUGGED_USB)
            updateViews.setImageViewResource(R.id.imageView2, R.drawable.usb);
    else 
        updateViews.setImageViewResource(R.id.imageView2, R.drawable.empty);

我确信有一种更“雄伟”的方式来做到这一点,但我只是对为什么 USB int 插入 USB (2) 而不是 AC (1) 时通过了感到困惑。

谢谢!

【讨论】:

以上是关于电池管理器未收到 BATTERY PLUGGED AC in的主要内容,如果未能解决你的问题,请参考以下文章

android.permission.BATTERY_STATS 使用情况

Android常用系统广播

常用系统广播

在 chrome 中获取电池状态

MTK 电池曲线配置

MTK 电池曲线配置