Как определить состояние подключенного питания? - PullRequest
24 голосов
/ 16 июля 2010

Существует ли простой способ получать уведомления, когда к телефону Android подключено питание от сети USB или от сети переменного тока?

Ответы [ 5 ]

68 голосов
/ 12 июля 2011

В 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
       }
   }
}
9 голосов
/ 16 июля 2010

Настройка BroadcastReceiver для ACTION_BATTERY_CHANGED. Intent дополнительно сообщит вам, в каком состоянии находится зарядка - подробности см. BatteryManager.

4 голосов
/ 02 августа 2017

другим способом является использование менеджера батареи. это я могу использовать для API> = 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;
    }
}
0 голосов
/ 22 сентября 2017

Вот еще один способ опроса информации:

читать значения здесь: например.

через оболочку Android:

cat /sys/class/power_supply/usb/online

1 = подключено, 0 =не.Отражает состояние USB-подключения.

cat / sys / class / power_supply / ac / online

1 = подключено, 0 = нет.Отражает состояние подключения к сети переменного тока.

Используя оба из них вместе, я думаю, скажет, получает ли устройство питание или нет.Не уверен, что местоположение одинаково для всех устройств.Нашел то же самое местоположение, хотя на android 7+ и 5+, на планшете Samsung и устройстве RockChip.

Для устройств, которые я упомянул, протестировано, оно работало.Файлы являются RO, только для чтения, вы должны только читать их, чтобы опросить информацию.API-интерфейсы Android не обеспечивали уровень детализации, который мне был необходим в той версии, в которой я должен был использовать (5.1.1), это было сделано.Я использовал предоставленный Android API для создания процесса запуска этих команд.Не требует рута.Это было сделано для приложения киоска.Вы также можете запустить тот же процесс, используя только 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());
}
0 голосов
/ 14 июня 2013

Еще одна вещь, которую вы должны проверить, есть ли ошибки в приложении Manifest --->. Если затем нажмите на поле с ошибкой и просто нажмите на ссылку «Имя» Затем появится диалоговое окно для добавления класса. добавьте класс и в классе скопируйте код on receive. То есть код выше должен быть скопирован в файл класса, а не в основное действие Спасибо Pzycoderz

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...