Laden...

Android Bluetooth

Letzter Beitrag vor einem Jahr 4 Posts 980 Views
Android Bluetooth

Hallo zusammen

Ich würde gerne eine Xamarin Forms/ Android - Anwendung schreiben die Bluetooth nutzt. Anfangs wollte ich eigentlich ein Plugin nutzen, jedoch komme ich mit den im Netz auffindbaren Plugins nicht klar. Beispielanwendungen sind meist veraltet ,zeigen im Code viele "Deprectated" - Fehler oder funktionieren erst gar nicht mehr, oder/und die Dokumentation ist zu kryptisch. Nun habe ich angefangen einen eigenen einfachen Client aufzusetzen. Einige Funktionen sind soweit vorhanden, so dass ich alle verbundenen Gerät bekomme und auch ein ausgewähltes Gerät verbinden kann. Ich würde jetzt gern noch die Umgebung nach verfügbaren Geräten absuchen, jedoch finde ich nun mehr seit 5 Tagen intensiver suche keine passende Lösung dazu. Ich währe hier für Hilfe vll. in Verbindung mit einer Erklärung sehr Dankbar! Die Verbindung wird via Interface aufgebaut.

Xamarin Forms is halt leider auch veraltet; es geht alles Richtung MAUI und niemand investiert mehr Zeit in Forms, leider.

Der erste Google Treffer nach (Google Suche nach "xamarin forms bluetooth") führt mich zu GitHub - dotnet-bluetooth-le/dotnet-bluetooth-le: Bluetooth LE plugin for Xamarin/MAUI, supporting Android, iOS, Mac, Windows, was nach einem aktiven Projekt mit recht großer Verbreitung und Docs aussieht.

Das hatte ich bereits versucht, leider gibt es hier mit der Kompatibilität zu bzw. ab Android 12 Probleme.. Dafür ist hier der Rest gut: hat ein Beispiel, das im VS nicht komplett rot leuchtet und eine relativ gute Doku...

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) };
    }