Wir benutzen das in unserer neuen MAUI App.
Läuft von Android 7 bis Android 13.
Musst nur die richtigen Berechtigungen anfordern.
<!-- For below Android 12 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<!-- Request legacy Bluetooth + location permissions on older devices. -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<!-- For Android 12 and above -->
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" android:minSdkVersion="31" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" android:minSdkVersion="31" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:minSdkVersion="31"
android:usesPermissionFlags="neverForLocation" />
public class BluetoothLEPermissions : Permissions.BasePlatformPermission
{
public override (string androidPermission, bool isRuntime)[] RequiredPermissions
{
get
{
var isV12 = Environment.OSVersion.Version.Major≥31;
if( isV12)
{
return new List<(string androidPermission, bool isRuntime)>
{
(Android.Manifest.Permission.Bluetooth, true),
(Android.Manifest.Permission.BluetoothAdmin, true),
(Android.Manifest.Permission.BluetoothScan, true),
(Android.Manifest.Permission.BluetoothConnect, true),
(Android.Manifest.Permission.AccessFineLocation, true),
(Android.Manifest.Permission.AccessCoarseLocation, true),
//(Android.Manifest.Permission.AccessBackgroundLocation, true),
}.ToArray();
}
else
{
return new List<(string androidPermission, bool isRuntime)>
{
//(Android.Manifest.Permission.Bluetooth, true),
//(Android.Manifest.Permission.BluetoothAdmin, true),
(Android.Manifest.Permission.AccessFineLocation, true),
(Android.Manifest.Permission.AccessCoarseLocation, true),
//(Android.Manifest.Permission.BluetoothScan, true),
//(Android.Manifest.Permission.BluetoothAdmin, true),
(Android.Manifest.Permission.AccessBackgroundLocation, true),
}.ToArray();
}
}
}
}
public class AccessFineLocation : Permissions.BasePlatformPermission
{
public override (string androidPermission, bool isRuntime)[] RequiredPermissions =>
new (string, bool)[] { (Android.Manifest.Permission.AccessFineLocation, true) };
}
public class AccessCoarseLocation : Permissions.BasePlatformPermission
{
public override (string androidPermission, bool isRuntime)[] RequiredPermissions =>
new (string, bool)[] { (Android.Manifest.Permission.AccessCoarseLocation, true) };
}
public class AccessBackgroundLocation : Permissions.BasePlatformPermission
{
public override (string androidPermission, bool isRuntime)[] RequiredPermissions =>
new (string, bool)[] { (Android.Manifest.Permission.AccessBackgroundLocation, true) };
}
public class BluetoothP : Permissions.BasePlatformPermission
{
public override (string androidPermission, bool isRuntime)[] RequiredPermissions =>
new (string, bool)[] { (Android.Manifest.Permission.Bluetooth, true) };
}
public class BluetoothAdvertise : Permissions.BasePlatformPermission
{
public override (string androidPermission, bool isRuntime)[] RequiredPermissions =>
new (string, bool)[] { (Android.Manifest.Permission.BluetoothAdvertise, true) };
}
public class BluetoothScan : Permissions.BasePlatformPermission
{
public override (string androidPermission, bool isRuntime)[] RequiredPermissions =>
new (string, bool)[] { (Android.Manifest.Permission.BluetoothScan, true) };
}
public class BluetoothConnect : Permissions.BasePlatformPermission
{
public override (string androidPermission, bool isRuntime)[] RequiredPermissions =>
new (string, bool)[] { (Android.Manifest.Permission.BluetoothConnect, true) };
}
public class BluetoothAdmin : Permissions.BasePlatformPermission
{
public override (string androidPermission, bool isRuntime)[] RequiredPermissions =>
new (string, bool)[] { (Android.Manifest.Permission.BluetoothAdmin, true) };
}