2013-02-11 4 views
3

Я пытаюсь прочитать состояние Android батареи, когда мой повторив сигнал вещатель называется У меня есть следующие настройки:Android BatteryManager Возвращает только 1

public class RepeatingAlarm extends BroadcastReceiver { 

    @Override  
    public void onReceive(Context context, Intent intent) 
    { 

      // Acquire the make of the device 
      final String PhoneModel = android.os.Build.MODEL; 
      final String AndroidVersion = android.os.Build.VERSION.RELEASE; 

      // Grab the battery information 
      int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
      int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); 
      final float batteryPct = level/(float)scale; 
    } 

} 

Но я не понимаю, почему она возвращается, что batteryPct = 1. Что-то мне здесь не хватает? Я добавил правильные разрешения на основе страницы Google Android, но, похоже, это не помогло.

ответ

9

Вы получаете -1 для обоих level и scale. Это потому, что вы можете пытаться транслировать ACTION_BATTERY_CHANGED в манифесте.

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

Intent i = new ContextWrapper(applicationContext).registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 
// now you can get the level and scale from this intent variable 
int level = i.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
int scale = i.getIntExtra(BatteryManager.EXTRA_SCALE, -1); 

float battPct = level/(float)scale; 

Вы не NEET к устройству приемника для этого намерения, просто использовать упомянутый выше способ, где бы вы хотите использовать его.

+0

Отлично, спасибо большое! Я должен был внести некоторые незначительные изменения в строку Intent i, из-за этого вызывая ошибку («компонентам не разрешено регистрироваться для получения намерений»). Но все хорошо. – eWizardII

+0

Благодарим вас за этот фрагмент кода. Просто потратил впустую 2-3 часа, чтобы найти, почему я не получаю никакой информации о батарее на широковещательном приемнике, который был объявлен на манифесте. – Javidan

2

Вы могли бы получать -1 для обоих level и scale переменной (значение по умолчанию вы указали), поэтому постарайтесь, чтобы напечатать их значения, чтобы убедиться, что intent имеет те значения, установленные должным образом.

Вы должны слушать ACTION_BATTERY_CHANGED к get battery level in Android