我的应用有一个广播接收器,可以收听ACTION_POWER_CONNECTED
的更改,然后标记屏幕以保持开启状态。
我缺少的是应用程序首次运行时检查充电状态的能力。任何人都可以帮我用代码来手动检查充电状态吗?
答案 0 :(得分:136)
感谢CommonsWare,这里是我写的代码。
public class Power {
public static boolean isConnected(Context context) {
Intent intent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
return plugged == BatteryManager.BATTERY_PLUGGED_AC || plugged == BatteryManager.BATTERY_PLUGGED_USB || plugged == BatteryManager.BATTERY_PLUGGED_WIRELESS;
}
}
if (Power.isConnected(context)) {
...
}
或Kotlin版
object Power {
fun isConnected(context: Context): Boolean {
val intent = context.registerReceiver(null, IntentFilter(Intent.ACTION_BATTERY_CHANGED))
val plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1)
return plugged == BatteryManager.BATTERY_PLUGGED_AC || plugged == BatteryManager.BATTERY_PLUGGED_USB || plugged == BatteryManager.BATTERY_PLUGGED_WIRELESS
}
}
http://developer.android.com/training/monitoring-device-state/battery-monitoring.html
答案 1 :(得分:29)
public static boolean isPlugged(Context context) {
boolean isPlugged= false;
Intent intent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
isPlugged = plugged == BatteryManager.BATTERY_PLUGGED_AC || plugged == BatteryManager.BATTERY_PLUGGED_USB;
if (VERSION.SDK_INT > VERSION_CODES.JELLY_BEAN) {
isPlugged = isPlugged || plugged == BatteryManager.BATTERY_PLUGGED_WIRELESS;
}
return isPlugged;
}
支持无线充电的小更新。
答案 2 :(得分:25)
致电registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED))
。这将返回Intent
BatteryManager
,其Intent.ACTION_BATTERY_CHANGED
上已定义额外内容,以告知您是否已插入。
这是有效的,因为{{1}}是一个粘性广播。
答案 3 :(得分:7)
在Android M +上,您可以通过BatteryManager
使用getSystemService(BATTERY_SERVICE)
服务。在运行pre-M的设备上,您可以使用其他人提到的粘性广播。例如:
public static boolean isCharging(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
BatteryManager batteryManager = (BatteryManager) context.getSystemService(Context.BATTERY_SERVICE);
return batteryManager.isCharging();
} else {
IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent intent = context.registerReceiver(null, filter);
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
if (status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL) {
return true;
}
}
return false;
}
答案 4 :(得分:5)
您的答案在android reference!
以下是示例代码:
// Are we charging / charged?
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
// How are we charging?
int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
答案 5 :(得分:3)
简单的方法是使用意图过滤器ACTION_BATTERY_CHANGED
public void checkBatteryState(View sender) {
IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = registerReceiver(null, filter);
int chargeState = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
String strState;
switch (chargeState) {
case BatteryManager.BATTERY_STATUS_CHARGING:
case BatteryManager.BATTERY_STATUS_FULL:
strState = "charging";
break;
default:
strState = "not charging";
}
TextView tv = (TextView) findViewById(R.id.textView);
tv.setText(strState);
}
答案 6 :(得分:3)
试试这个:
$(".order-edit").attr("id",message.data.id)
答案 7 :(得分:2)
resultData.mat
答案 8 :(得分:1)
这是一个棘手的意图,您不需要注册BroadcastReceiver - 只需调用registerReceiver传入null作为接收器,如下一个片段所示,返回当前的电池状态意图。您可以在此处传递实际的BroadcastReceiver对象,但我们将在稍后的部分中处理更新,因此不需要。
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);
您可以提取当前的充电状态,如果设备正在充电,还可以通过USB或AC充电器进行充电:
// Are we charging / charged?
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
// How are we charging?
int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
当设备连接或断开电源时,BatteryManager会广播操作。即使您的应用未运行,接收这些事件也很重要 - 特别是因为这些事件会影响您启动应用的频率以启动后台更新 - 因此您应该在清单中注册BroadcastReceiver通过在意图过滤器中定义 ACTION_POWER_CONNECTED 和 ACTION_POWER_DISCONNECTED 来收听这两个事件。
<receiver android:name=".PowerConnectionReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
</intent-filter>
</receiver>
在关联的BroadcastReceiver实现中,您可以按照上一步中的描述提取当前的计费状态和方法。
public class PowerConnectionReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
}
}