Mvvmcross.plugin.Ble și plugin.Ble ambele gestionează apeluri BLE asincrone, dar diferă în abordarea lor de a gestiona aceste apeluri și de a se integra cu cadrul MVVMCross.
mvvmcross.plugin.ble
1. Injecție de dependență: mvvmcross.plugin.Ble utilizează sistemul de injecție de dependență MVVMCross pentru a gestiona instanțele de `ibluetoothle` și` iadapter`. Acestea sunt înregistrate ca singletoni inițializați leneși, permițându-le să fie rezolvate și injectate în modele de vizualizare sau alte componente, după cum este necesar [1].
2. Înregistrarea serviciilor: pluginul înregistrează aceste servicii, astfel încât acestea să poată fi accesate cu ușurință în întreaga aplicație. Acest lucru simplifică procesul de obținere a unui adaptor Bluetooth sau gestionarea operațiunilor Bluetooth în aplicație [1].
3. Manevrarea excepțiilor: în timp ce mvvmcross.plugin.Ble nu gestionează în mod explicit excepțiile asincrone în mod diferit, se recomandă apelurile blestemate cu blocuri de încercare, datorită potențialului de excepții, în special pe Android [1].
4. Integrare cu MVVMCross: pluginul este proiectat să funcționeze perfect cu MVVMcross, permițând o integrare ușoară în aplicații bazate pe MVVMcross. Aceasta include suport pentru caracteristici precum restaurarea de stat și modurile de fundal pe iOS [1].
plugin.Ble
1. Acces direct: Plugin.Ble oferă acces direct la funcționalitatea Bluetooth, fără a fi nevoie de injecție de dependență. Utilizatorii pot accesa pur și simplu instanța `CrossBluetoothle.Current` pentru a gestiona operațiunile Bluetooth [2].
2. Operațiuni Async: Plugin.Ble acceptă operațiuni asincrone precum conectarea la dispozitive, caracteristicile de citire/scriere și manipularea notificărilor. Cu toate acestea, necesită o gestionare atentă a acestor apeluri Async pentru a evita probleme precum erorile GATT pe Android [2].
3. Manevrarea excepțiilor: plugin.Ble subliniază importanța apelurilor asincice înconjurătoare cu blocuri de încercare pentru a gestiona excepții care pot apărea în timpul operațiunilor. Acest lucru este crucial datorită naturii imprevizibile a interacțiunilor BLE [2].
4. Cele mai bune practici generale: pluginul încurajează cele mai bune practici, cum ar fi evitarea operațiunilor concomitente BLE în timpul scanării, oprirea scanărilor odată ce dispozitivul dorit este găsit și nu în cache, caracteristici sau instanțe de serviciu între conexiuni [2].
Diferențe cheie
- Injecție de dependență: mvvmcross.plugin.Ble folosește injecția de dependență, ceea ce simplifică gestionarea serviciilor în aplicațiile MVVMcross, în timp ce plugin.Ble nu necesită acest lucru.
- Integrare: mvvmcross.plugin.ble este conceput special pentru aplicațiile MVVMcross, oferind integrare cu caracteristicile sale, în timp ce plugin.Ble este mai versatil și poate fi utilizat în orice proiect Xamarin sau Maui.
- Gestionarea apelurilor Async: Ambele pluginuri necesită gestionarea atentă a apelurilor async, dar mvvmcross.plugin.Ble se bazează pe gestionarea serviciilor MVVMcross, care ar putea simplifica gestionarea erorilor într -un cadru structurat.
În rezumat, în timp ce ambele plugin -uri gestionează apele asincrone BLE în mod similar în ceea ce privește necesitatea unei gestionări atente și a unei manipulări de excepții, mvvmcross.plugin.ble se integrează mai strâns cu cadrul MVVMCross, folosindu -și funcțiile de injecție de dependență și de gestionare a serviciilor.
Citări:[1] https://www.nuget.org/packages/mvvmcross.plugin.ble/
[2] https://www.nuget.org/packages/plugin.ble/
[3] https://stackoverflow.com/questions/36522920
[4] https://www.youtube.com/watch?v=sfgulskeoee
[5] https://www.reddit.com/r/dotnet/comments/1bds6rj/why_there_is_no_good_crossplatform_bluetooth/
[6] https://github.com/xabre/xamarin-bluetooth-le/issues/524
[7] https://stackoverflow.com/questions/69735708/xamarin-plugin-ble-why-data-head-doesnt-hange
[8] https://learn.microsoft.com/en-us/answers/questions/2101489/using-plugin-ble-to-conect-reconnect-to-ble-devic