2013-02-11 65 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。有什么我在这里失踪?我添加了基于android谷歌页面的正确权限,但这似乎没有帮助。

回答

9

你得到-1两个levelscale。 这是因为您可能试图在清单中广播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 2013-02-11 03:39:41

+0

谢谢你的这段代码。只是浪费了2-3个小时才发现,为什么我没有收到关于广播接收机上的电池信息,这些信息是在清单上声明的。 – Javidan 2014-09-21 13:16:16

2

你可能会得到-1两个levelscale变量(您指定的默认值),所以尝试打印他们的价值观,以确保该intent具有正确设置这些值。

你应该听ACTION_BATTERY_CHANGEDget battery level in Android