我希望定期获取Android设备的电池状态.
由于每隔几分钟轮询电池更换是一个坏主意,我想使用重复警报,可能每小时一次,可以调用一个获取当前电池状态的类.
但是我当前的实现给了我一个例外:
android.content.ReceiverCallNotAllowedException: IntentReceiver components are not allowed to register to receive intents.
Run Code Online (Sandbox Code Playgroud)
警报超时时调用的类如下:
public class GetBatteryStatusTimeout extends BroadcastReceiver{
private static final String TAG = "GetBatteryStatusTimeout";
@Override
public void onReceive(Context context, Intent intent) {
BatteryDataManager batteryData = new BatteryDataManager(context);
batteryData.getStatus();
Log.e(TAG, "GetBatteryStatus timer expired, getting status");
}
}
Run Code Online (Sandbox Code Playgroud)
该getStatus()方法调用代码注册粘性意图并获取电池状态:
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING;
boolean fullyCharged = status == BatteryManager.BATTERY_STATUS_FULL;
int …Run Code Online (Sandbox Code Playgroud) android battery broadcastreceiver alarmmanager android-intent