如何检测电源连接状态?

时间:2010-07-16 16:50:47

标签: android

当USB或AC电源连接到Android手机时,是否有一种简单的通知方式?

5 个答案:

答案 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