我很难弄清楚一个设备是否充电,但只在一些设备上。,即索尼Xperia和Xperia。
电池状态总是报告手机已断电。我已经在三星的Galaxy S4和GalaxyS2上测试过这个应用程序,它在这些应用上正确工作。
我有一个BroadcastReceiver,PowerConnectionReceiver,它在清单中注册以接收插入/插入事件。当接收器获得一个意图时,它调用另一个意图获取当前的电池状态:
@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。
发布于 2013-12-18 17:41:56
有人能在代码中看到明显的缺陷吗?
您假设ACTION_BATTERY_CHANGED已经广播,反映了新的充电状态,然后再广播您正在收听的任何广播(“插入/插入事件”)。我不知道这是一项要求。如果设备在ACTION_BATTERY_CHANGED之前发送“插入/插入事件”,您的代码将在“插入/插入事件”之前看到最后一个ACTION_BATTERY_CHANGED。
发布于 2013-12-18 16:38:47
在您的代码中有:
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING;在try块中,然后当您记录输出时,它位于try块之外:
Toast.makeText(context, "Battery charging " + isCharging , Toast.LENGTH_SHORT).show();尝试将您的祝酒词放在您的Try块中,或者扩展isCharging的范围:
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();
}https://stackoverflow.com/questions/20663403
复制相似问题