2015-04-21 2 views
3

Я пытаюсь обнаружить, когда пользователь подключается (или отключается) на своем устройстве для зарядки. В моем приемнике, где я определяю, подключен он или нет, я всегда получаю «ложное» чтение статуса. Вот мой код:Почему мой приемник для зарядки всегда возвращает false?

(В манифесте):

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

Вот класс PowerConnectionReceiver:

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; 

     Log.d("Battery", "Plugged In: " + String.valueOf(isCharging)); 
     Log.d("Battery", "status: " + String.valueOf(status)); 
    } 
} 

Что работает: PowerConnectionReceiver правильно вызывается, когда телефон подключен к сети.

Однако, когда я распечатываю статус, он всегда возвращается как -1 (который является значением по умолчанию, которое я ввел). Кажется, BatteryManager.EXTRA_STATUS не подходит.

Для справки, вот что эти Бревна распечатывания:

"Plugged In: false" 
"status: -1" 

Больше ссылок - вот страница на сайте разработчиков, я использую для этого: http://developer.android.com/training/monitoring-device-state/battery-monitoring.html

+0

Это поможет, если вы предоставите значения переменных «status» и «chargePlug». – Maks

ответ

2

Получил это ... этот ответ пришел из другого сообщения на этом сайте относительно другой проблемы аккумулятора.

public class PowerConnectionReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     String action = intent.getAction(); 

     if(action.equals(Intent.ACTION_POWER_CONNECTED)) 
     { 
      // Do code here for when power connected 
     } 
     else if(action.equals(Intent.ACTION_POWER_DISCONNECTED)) 
     { 
      // Do code here for when power disconnected 
     } 
} 

Хотя этот ответ не совсем элегантно, кто достаточно хорошо знаком с тем, как получить доступ других свойств, которые приходят вместе с этим intent.getAction() должен быть в состоянии сделать больше информации о батарее. В противном случае, это делает все, что мне нужно! Приветствия.

+0

вы также должны отправить эту ссылку? –

0

I может быть неправильно , но кажется, что статус представляет собой набор флагов. Например, аккумулятор может быть полностью заряжен и все еще подключен к зарядному устройству. Итак, что вы можете попробовать, вместо сравнения с использованием оператора «==», попробуйте применить битмаску. Что-то вроде этого:

boolean usbCharge = chargePlug & BatteryManager.BATTERY_PLUGGED_USB == BatteryManager.BATTERY_PLUGGED_USB; 
boolean acCharge = chargePlug & BatteryManager.BATTERY_PLUGGED_AC == BatteryManager.BATTERY_PLUGGED_AC; 

Из источников BatteryManager:

/** Power source is an AC charger. */ 
public static final int BATTERY_PLUGGED_AC = 1; 
/** Power source is a USB port. */ 
public static final int BATTERY_PLUGGED_USB = 2; 
/** Power source is wireless. */ 
public static final int BATTERY_PLUGGED_WIRELESS = 4; 

/** @hide */ 
public static final int BATTERY_PLUGGED_ANY = 
     BATTERY_PLUGGED_AC | BATTERY_PLUGGED_USB | BATTERY_PLUGGED_WIRELESS; 

Так источник питания может быть суперпозицией битов

То же самое может быть применимо к переменной состояния:

boolean isCharging = 
     (status & BatteryManager.BATTERY_STATUS_CHARGING == BatteryManager.BATTERY_STATUS_CHARGING) 
    || (status & BatteryManager.BATTERY_STATUS_FULL == BatteryManager.BATTERY_STATUS_FULL); 
+0

Я добавил эти строки в свой код, и он по-прежнему действует. С помощью этого кода все возвращается как истинное. Кажется, проблема связана с намерением.getIntExtra (BatteryManager.EXTRA_STATUS, -1) ... он всегда возвращает -1 независимо от того, что – hellaandrew

Смежные вопросы