Проверьте, подключено ли устройство

В моем приложении есть широковещательный приемник для прослушивания изменений в ACTION_POWER_CONNECTED и, в свою очередь, флаг экрана, чтобы он продолжался.

То, что мне не хватает, – это возможность приложения проверять статус зарядки при первом запуске. Может ли кто-нибудь помочь мне с кодом, чтобы вручную проверить статус оплаты?

Благодаря 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)) { ... } 

или версия Котлина

 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 } } 

Примечание. BatteryManager.BATTERY_PLUGGED_WIRELESS требует API уровня 17 (Jelly Bean MR1). Для обратной совместимости измените последнюю строку на:

 return plugged == BatteryManager.BATTERY_PLUGGED_AC || plugged == BatteryManager.BATTERY_PLUGGED_USB || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && plugged == BatteryManager.BATTERY_PLUGGED_WIRELESS) 

http://developer.android.com/training/monitoring-device-state/battery-monitoring.html

 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; } 

Небольшое обновление для поддержки беспроводной зарядки.

Вызов registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)) . Это вернет Intent , у которого есть дополнительные функции, определенные на BatteryManager чтобы вы знали, подключен он или нет.

Это работает, потому что Intent.ACTION_BATTERY_CHANGED – это липкая трансляция.

Ваш ответ находится в андроиде !

Вот пример кода:

 // 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; 

На Android M + вы можете использовать службу getSystemService(BATTERY_SERVICE) через 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; } 

ACTION_BATTERY_CHANGED способом является использование ACTION_BATTERY_CHANGED фильтра 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); } 

попробуй это:

 public class PowerConnectionReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); Intent batteryStatus = context.registerReceiver(null, ifilter); 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; if (batteryStatus != null) { int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1); float batteryPct = level / (float) scale; } }//end onReceive }//end PowerConnectionReceiver 
 BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub String action = intent.getAction(); if(action.equalsIgnoreCase(ACTION_POWER_CONNECTED)) { if(chargerConnected != null ) { chargerConnected.setText("Cable Connected"); } if(chargerImage != null ) { chargerImage.setImageDrawable(getResources().getDrawable(R.drawable.usb)); } }else if(action.equalsIgnoreCase(ACTION_POWER_DISCONNECTED)) { if(chargerConnected != null ) { chargerConnected.setText("NOT CHARGE"); } if(chargerImage != null ) { chargerImage.setImageDrawable(getResources().getDrawable(R.drawable.battery_icon)); } try { Toast.makeText(context, "Power Cable Disconnected", Toast.LENGTH_SHORT).show(); }catch (Exception e){e.printStackTrace();} } } }; 

Это липкое намерение, вам не нужно регистрировать BroadcastReceiver, просто называя registerReceiver, передавая нуль в качестве приемника, как показано в следующем fragmentе, возвращается текущее намерение батареи. Здесь вы можете передать реальный объект BroadcastReceiver, но мы будем обрабатывать обновления в более позднем разделе, поэтому это необязательно.

 IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); Intent batteryStatus = context.registerReceiver(null, ifilter); 

Вы можете извлечь как текущее состояние зарядки, так и, если устройство заряжается, заряжается ли оно через USB или зарядное устройство переменного тока:

 // 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 в рамках фильтра намерений.

       

В рамках связанной реализации 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; } } 
  • Как выйти из приложения Android с помощью кода?
  • Android - Firebase Quickstart Email / Password Auth demo не работает
  • Базовая реализация Android GCM
  • notifyDataSetChange не работает с пользовательским адаптером
  • Не нашел class «com.google.firebase.provider.FirebaseInitProvider»?
  • Как записывать телефонные звонки в Android?
  • Как читать входной stream http
  • Android Studio не может запускаться после установки
  • Класс BaseAdapter не будет устанавливать адаптер внутри Asynctask - Android
  • Установите прозрачный фон изображения на Android
  • Инициализация игрового клиента на Android
  • Interesting Posts

    UIImage для base64 Кодирование строк

    Расширения OpenGL, доступные на разных устройствах Android

    Как проточить CenturyLink Fiber «Модем»

    В чем разница между абстрактным деревом синтаксиса и деревом синтаксиса бетона?

    Могу ли я использовать библиотеку .NET 4.0 в приложении .NET 2.0?

    Могу ли я заставить gcc сказать мне, когда вычисление приводит к NaN или inf во время выполнения?

    MVC 4 Редактирование модальной формы с использованием Bootstrap

    Входящие Outlook 2010 рассылаются спамом

    Ближайшая точка на кубической кривой Безье?

    CUDA, как получить сетку, блок, размер резьбы и рассчитать вычисление не квадратной матрицы

    Каков эффективный способ подсчета бит в позиции или ниже?

    Для i = 0, почему (i + = i ++) равно 0?

    Как использовать SharedPreferences

    Почему SYSTEM_DRV Partition неожиданно отображается в Проводнике Windows 10 Lenovo?

    Как представить пустое значение как пустой элемент с помощью JAXB?

    Давайте будем гением компьютера.