Из документов :
ACTION_BATTERY_CHANGED Действие широковещания: Это липкое вещание, содержащее состояние зарядки, уровень и другую информацию о батарее.См. BatteryManager для документации по содержанию намерения.
Вы не можете получить это через компоненты, объявленные в манифестах, только явно зарегистрировавшись для этого с Context.registerReceiver ().См. ACTION_BATTERY_LOW, ACTION_BATTERY_OKAY, ACTION_POWER_CONNECTED и ACTION_POWER_DISCONNECTED для различных широковещательных сообщений, связанных с батареями, которые отправляются и могут быть получены через приемники манифеста
Таким образом, вы не можете использовать только эти BroadcastReceiver
*, декальрегистрация явно из вашего контекста.
Кроме того, ваше электропитание BroadcastReceiver
кажется правильным.Попробуйте разделить его на другое BroadcastReceiver
, возможно, действие ACTION_BATTERY_CHANGED
мешает другим действиям.
Это моя заявленная BroadcastReceiver
, которую я использую, и она работает в моем приложении.
<receiver android:name=".PowerConnectionBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
</intent-filter>
</receiver>
PowerConnectionBroadcastReceiver
public class PowerConnectionBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = "PowerRcvr";
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_POWER_CONNECTED)) {
Log.d(TAG, "Device is charging");
} else if (action.equals(Intent.ACTION_POWER_DISCONNECTED)) {
Log.d(TAG, "Device is NOT charging");
} else {
Log.d(TAG, "Unable to check if device is charging or not");
}
}
}
ПРИМЕЧАНИЕ : Этот код работает на Android 8 с targetSdkVersion 25 или ниже.
В targetSdkVersion 26 или выше большая часть BroadcastReceivers
не работает через Manifest
из-за фоновых ограничений.Вот документация (спасибо Павлу) об этом.Так что ваш IntentFilters
не будет работать.Чтобы он работал, вы можете загрузить targetSdkVersion до 25 или ниже.