diff --git a/DeviceTests/DeviceTests.Android/Properties/AndroidManifest.xml b/DeviceTests/DeviceTests.Android/Properties/AndroidManifest.xml index 814ca24ca..23cb78ef6 100644 --- a/DeviceTests/DeviceTests.Android/Properties/AndroidManifest.xml +++ b/DeviceTests/DeviceTests.Android/Properties/AndroidManifest.xml @@ -1,8 +1,8 @@  - - + + diff --git a/Xamarin.Essentials/Battery/Battery.android.cs b/Xamarin.Essentials/Battery/Battery.android.cs index 4c3bfedfd..9e89388c6 100644 --- a/Xamarin.Essentials/Battery/Battery.android.cs +++ b/Xamarin.Essentials/Battery/Battery.android.cs @@ -15,7 +15,7 @@ static void StartEnergySaverListeners() return; powerReceiver = new EnergySaverBroadcastReceiver(OnEnergySaverChanged); - Platform.AppContext.RegisterReceiver(powerReceiver, new IntentFilter(PowerManager.ActionPowerSaveModeChanged)); + Platform.RegisterBroadcastReceiver(powerReceiver, new IntentFilter(PowerManager.ActionPowerSaveModeChanged), false); } static void StopEnergySaverListeners() @@ -52,7 +52,7 @@ static void StartBatteryListeners() Permissions.EnsureDeclared(); batteryReceiver = new BatteryBroadcastReceiver(OnBatteryInfoChanged); - Platform.AppContext.RegisterReceiver(batteryReceiver, new IntentFilter(Intent.ActionBatteryChanged)); + Platform.RegisterBroadcastReceiver(batteryReceiver, new IntentFilter(Intent.ActionBatteryChanged), false); } static void StopBatteryListeners() @@ -76,7 +76,7 @@ static double PlatformChargeLevel Permissions.EnsureDeclared(); using (var filter = new IntentFilter(Intent.ActionBatteryChanged)) - using (var battery = Platform.AppContext.RegisterReceiver(null, filter)) + using (var battery = Platform.RegisterBroadcastReceiver(null, filter, false)) { var level = battery.GetIntExtra(BatteryManager.ExtraLevel, -1); var scale = battery.GetIntExtra(BatteryManager.ExtraScale, -1); @@ -96,7 +96,7 @@ static BatteryState PlatformState Permissions.EnsureDeclared(); using (var filter = new IntentFilter(Intent.ActionBatteryChanged)) - using (var battery = Platform.AppContext.RegisterReceiver(null, filter)) + using (var battery = Platform.RegisterBroadcastReceiver(null, filter, false)) { var status = battery.GetIntExtra(BatteryManager.ExtraStatus, -1); switch (status) @@ -123,7 +123,7 @@ static BatteryPowerSource PlatformPowerSource Permissions.EnsureDeclared(); using (var filter = new IntentFilter(Intent.ActionBatteryChanged)) - using (var battery = Platform.AppContext.RegisterReceiver(null, filter)) + using (var battery = Platform.RegisterBroadcastReceiver(null, filter, false)) { var chargePlug = battery.GetIntExtra(BatteryManager.ExtraPlugged, -1); diff --git a/Xamarin.Essentials/Connectivity/Connectivity.android.cs b/Xamarin.Essentials/Connectivity/Connectivity.android.cs index 5cc929552..689732c06 100644 --- a/Xamarin.Essentials/Connectivity/Connectivity.android.cs +++ b/Xamarin.Essentials/Connectivity/Connectivity.android.cs @@ -34,7 +34,7 @@ static void StartListeners() conectivityReceiver = new ConnectivityBroadcastReceiver(OnConnectivityChanged); - Platform.AppContext.RegisterReceiver(conectivityReceiver, filter); + Platform.RegisterBroadcastReceiver(conectivityReceiver, filter, false); } static void StopListeners() diff --git a/Xamarin.Essentials/Platform/Platform.android.cs b/Xamarin.Essentials/Platform/Platform.android.cs index 8a7053b10..4ad423239 100644 --- a/Xamarin.Essentials/Platform/Platform.android.cs +++ b/Xamarin.Essentials/Platform/Platform.android.cs @@ -122,6 +122,19 @@ static void CheckAppActions(AndroidIntent intent) } } + internal static AndroidIntent RegisterBroadcastReceiver(BroadcastReceiver receiver, IntentFilter filter, bool exported) + { + if (HasApiLevel(34)) + { + var flags = exported ? ReceiverFlags.Exported : ReceiverFlags.NotExported; + + // Explicit cast of flags because of: https://github.com/xamarin/xamarin-android/issues/7503 + return AppContext.RegisterReceiver(receiver, filter, (ActivityFlags)flags); + } + + return AppContext.RegisterReceiver(receiver, filter); + } + internal static bool HasSystemFeature(string systemFeature) { var packageManager = AppContext.PackageManager;