当USB或AC电源连接到Android手机时,是否有一种简单的通知方式?
答案 0 :(得分:68)
在AndroidManifest.xml中
<application android:icon="@drawable/icon" android:label="@string/app_name">
<receiver android:name=".receiver.PlugInControlReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
</intent-filter>
</receiver>
</application>
在代码中
public class PlugInControlReceiver extends BroadcastReceiver {
public void onReceive(Context context , Intent intent) {
String action = intent.getAction();
if(action.equals(Intent.ACTION_POWER_CONNECTED)) {
// Do something when power connected
}
else if(action.equals(Intent.ACTION_POWER_DISCONNECTED)) {
// Do something when power disconnected
}
}
}
答案 1 :(得分:9)
为BroadcastReceiver
设置ACTION_BATTERY_CHANGED
。额外Intent
会告诉您充电状态 - 详情请见BatteryManager
。
答案 2 :(得分:4)
另一种方法是使用电池管理器。我可用于api&gt; = 21
public class PowerUtil {
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;
}
}
答案 3 :(得分:0)
这是另一种轮询信息的方式:
阅读这里的值:ex。
通过android shell:
cat /sys/class/power_supply/usb/online
1 =已连接,0 =未。反映USB连接状态。
cat / sys / class / power_supply / ac / online
1 =已连接,0 =未。反映AC连接状态。
同时使用这两者,我认为将判断设备是否正在接收电源。不确定所有设备的位置是否相同。在Android 7+和5+上,在三星平板电脑和RockChip设备上找到了相同的位置。
对于我提到的测试设备,它有效。文件是RO,只读,您只能读取它们来轮询信息。 android API没有提供我需要使用的版本(5.1.1)所需的详细程度,这样做。我使用提供的android API来创建一个运行这些命令的进程。它不需要root。这是为自助服务终端应用程序完成的。您也可以仅使用android API(文件,FileReader等)运行相同的进程。
以下是Android API示例:
File aFile = new File("/sys/class/power_supply/ac/online");
try {
BufferedReader br = new BufferedReader(new FileReader(aFile));
char aBuff[] = new char[1];
int aCount = br.read(aBuff,0, 1);
Log.d(TAG, "run: Res:"+new String(aBuff));
}catch(Exception e){
Log.d(TAG, "Exception:Error:run: "+e.toString());
}
答案 4 :(得分:-2)
还有一件事你必须检查Manifest ---&gt;应用程序中是否存在错误。 如果然后单击显示错误的字段,只需单击“名称”链接 然后出现用于添加课程的对话框。添加类并在类中复制接收的代码。这就是上面的代码应该复制在类文件而不是主活动中。 谢谢 Pzycoderz