Conectați lucrurile Android la un smartphone cu conexiuni în apropiere 2.0

Unul dintre primele lucruri pe care utilizatorii vor să le facă cu un nou dispozitiv inteligent de acasă este să-l primească în rețeaua wireless. Multe dispozitive IoT nu dispun de un ecran sau de o tastatură, astfel că un mod de a face acest lucru este să permită utilizatorilor să asocieze un smartphone cu dispozitivul, astfel încât aceștia să poată controla și configura dispozitivul. Acesta este modul în care Nest și Google Home funcționează, printre altele, și API-ul Close Connections 2.0 face posibil.

În acest articol veți primi o prezentare a interfeței API Near Connections 2.0 și modul în care aceasta poate fi utilizată pentru a asocia un smartphone Android la un dispozitiv Android Things pentru a oferi utilizatorilor dvs. o experiență însoțitoare de dispozitiv.

Ce este API-ul conexiunilor din apropiere?

API-ul "Conexiuni în apropiere" permite ca două dispozitive să comunice direct între ele prin Bluetooth sau fără fir fără a utiliza un punct de acces centralizat. Există două roluri pe care un dispozitiv le poate prelua: agent de publicitate, care permite altor dispozitive să știe că este disponibil să fie conectat la și descoperitor, care încearcă să găsească agenți de publicitate și să se conecteze la ele. Odată ce un set de dispozitive (cunoscute și sub denumirea de "puncte finale" în acest stadiu) au fost conectate împreună, aceștia pot trimite date către orice alt punct final din rețeaua din apropiere. 

Există două strategii pe care API-ul conexiunilor din apropiere le poate utiliza pentru conectarea împreună a dispozitivelor. Primul, P2P_STAR, este cel mai simplu cu care să lucrați. Este alcătuit dintr-un agent de publicitate care poate susține mai mulți descoperitori care se conectează la acesta. Al doilea, P2P_CLUSTER, permite oricărui număr de dispozitive să se conecteze și să accepte conexiuni de la orice alt număr de dispozitive. Aceasta creează o rețea de rețele cu un punct de eșec mai puțin centralizat, deși ocupă și mai multă lățime de bandă. Această strategie este ideală pentru sarcini utile mai mici, care nu trebuie să treacă printr-un dispozitiv central, cum ar fi pentru jocuri. 

Acest tutorial se va concentra pe folosirea strategiei mai simple pentru a conecta dispozitivul IoT ca agent de publicitate și va folosi telefonul smartphone al utilizatorului ca descoperitor. Totuși, până la sfârșit, ar trebui să aveți și suficiente informații pentru a implementa o strategie de cluster.

Să ne pregătim!

Vor exista două module pentru acest tutorial: aplicația mobilă și aplicația Android Things. Odată ce le-ați creat pe cele din Android Studio, va trebui să includeți dependența Serviciilor Google Play pentru conexiunile din apropiere la nivel de modul build.gradle fișier pentru ambele aplicații.

compile 'com.google.android.gms: play-services-nearby: 11.6.2'

După ce ați rulat o sincronizare a coloanei, deschideți AndroidManifest.xml fișiere pentru ambele module și includ următoarele permisiuni în cadrul cerere noduri.

    

Dispozitivele Android Things vor avea aceste permisiuni acordate dispozitivului după repornire, deși va trebui să solicitați permisiunea de la utilizatori din aplicația telefonică.

Activitate principala clasa în ambele lucruri și mobil modulele vor trebui să implementeze interfețele utilizate pentru apelurile de apel Google Play Services, cum ar fi:

public class MainActivity extinde FragmentActivity implementează GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener @Override public void onConnected (@Nullable Bundle Bundle)  @Override publice void onConnectionSuspended (int i)  @Override public void onConnectionFailed (@NonNull ConnectionResult connectionResult)  

Odată ce ați confirmat că utilizatorul are permisiunile de locație corespunzătoare onCreate (), puteți începe să vă conectați la serviciile Google Play pentru a utiliza interfața API pentru conexiunile din apropiere.

mGoogleApiClient = noul GoogleApiClient .Builder (acest lucru, acest lucru) .addApi (Nearby.CONNECTIONS_API) .enableAutoManage (acest lucru, acest) .build ();

Cand GoogleApiClient a terminat de conectat, onConnected () se va numi metoda. Aici veți începe procesul de publicitate sau de descoperire pentru dispozitivul dvs. În plus, ambele aplicații vor avea nevoie de un ID de serviciu, care este unic Şir identificator.

statică finală privată statică SERVICE_ID = "UNIQUE_SERVICE_ID";

Publicitate pe conexiunile din apropiere

Când lucrați cu API-ul Close Connections, va trebui să creați o ConnectionLifecycleCallback care, după cum sugerează și numele, va fi declanșată în diverse evenimente legate de ciclul de viață al conexiunilor. Pentru acest demo, vom folosi doar onConnectionInitiated () metodă. Se va salva o referință la primul punct final care încearcă să se conecteze la acesta, va accepta conexiunea și apoi va opri publicitatea. Dacă conexiunea nu reușește, aplicația poate reporni publicitatea.

finală privată ConnectionLifecycleCallback mConnectionLifecycleCallback = new ConnectionLifecycleCallback () @Override public void onConnectionInitiated (endpoint end String, ConnectionInfo connectionInfo) endpoint = endpointId; Nearby.Connections.acceptConnection (mGoogleApiClient, endpointId, mPayloadCallback) .setResultCallback (noul ResultCallback() @Override public void peResult (@NonNull com.google.android.gms.common.api.Status status) if (status.isSuccess ()) // Conexiunea acceptată); Nearby.Connections.stopAdvertising (mGoogleApiClient);  @Override public void onConnectionResult (Rezultat final al șirului, rezultatul ConnectionResolution)  @Overide public void onDisconnected (String endpointId) ;

Este posibil să fi observat că metoda de mai sus face trimitere și la a PayloadCallback obiect. Acest obiect are metode care sunt numite atunci când o încărcătură de date este trimisă de la agentul de publicitate la un punct final, precum și atunci când datele sunt primite de la un punct final. onPayloadReceived () metoda este locul în care ne vom ocupa de orice date trimise către dispozitivul Android Things. Această metodă conține Încărcătură utilă obiect care poate fi transformat într-o serie de octeți, și a Şir reprezentând adresa punctului final al dispozitivului de trimitere.

privat PayloadCallback mPayloadCallback = new PayloadCallback () @Override public void onPayloadReceived (Parametrul String, sarcina payload payload) Log.e ("Tuts +", New String (payload.asBytes ());  @Overide public void onPayloadTransferUpdate (Obiectiv final, PayloadTransferUpdate payloadTransferUpdate) ;

În acest moment, puteți începe să faceți publicitate pe dispozitivul dvs. IoT cu următoarea metodă:

Nearby.Connections.startAdvertising (mGoogleApiClient, "Nume dispozitiv", SERVICE_ID, mConnectionLifecycleCallback, newOpportOptions (Strategy.P2P_STAR));

Este posibil să observați că aici se aplică strategia P2P_STAR în rețeaua noastră de conexiuni în apropiere.

Când doriți să trimiteți o încărcătură utilă unui alt dispozitiv, puteți utiliza funcția Nearby.Connections.sendPayload () cu referința clientului Google API, numele punctului dvs. final și o gamă de octeți a datelor pe care doriți să le trimiteți.

Nearby.Connections.sendPayload (mGoogleApiClient, punct final, Payload.fromBytes ("Message" .getBytes ()));

Sfat: activați WiFi la Reboot

Un truc pe care l-am găsit util în timp ce lucram cu API-ul Close Connections pe un dispozitiv Android Things îl reactivează din repaus, deoarece dispozitivul poate fi dezactivat în cazul în care aparatul este oprit sau pierde energie în timpul publicității. Puteți face acest lucru prin preluarea WifiManager sistem de servicii și apeluri setWifiEnabled ().

wifiManager = (WifiManager) getSystemService (Context.WIFI_SERVICE); wifiManager.setWifiEnabled (true);

Descoperiți dispozitive cu conexiuni în apropiere

Descoperirea unui dispozitiv urmează un model foarte asemănător publicității. Dispozitivul se va conecta la Clientul API Google și va începe descoperirea. Când se găsește un agent de publicitate, descoperitorul va cere să se conecteze la agentul de publicitate. Dacă agentul de publicitate aprobă solicitarea, atunci cele două dispozitive se vor conecta și vor putea să trimită încărcări utile înainte și înapoi. Descoperitorul va folosi a PayloadCallback la fel ca și agentul de publicitate.

privat PayloadCallback mPayloadCallback = nou PayloadCallback () @Override public void onPayloadReceived (String s, sarcina payload payload) Log.e ("Tuts +", new String (payload.asBytes ());  @Override public void pePayloadTransferUpdate (String s, PayloadTransferUpdate payloadTransferUpdate) ;

Descoperitorul (aplicația mobilă) ConnectionLifecycleCallback va arăta, de asemenea, similar cu cel al agentului de publicitate:

finală privată ConnectionLifecycleCallback mConnectionLifecycleCallback = new ConnectionLifecycleCallback () @Override public void onConnectionInitiated (String endpointId, ConnectionInfo connectionInfo) Nearby.Connections.acceptConnection (mGoogleApiClient, endpointId, mPayloadCallback); mEndpoint = endpointId; Nearby.Connections.stopDiscovery (mGoogleApiClient);  @Override public void onConnectionResult (Rezultat final al șirului, rezultatul ConnectionResolution)  @Overide public void onDisconnected (String endpointId) ;

Ceea ce este diferit este acela că descoperitorii vor cere un EndpointDiscoveryCallback care va fi folosit atunci când un agent de publicitate este găsit, dar nu este încă conectat la. Acest obiect va iniția solicitarea de conectare la agentul de publicitate.

finală privată EndpointDiscoveryCallback mEndpointDiscoveryCallback = new EndpointDiscoveryCallback () @Override public void peEndpointFound (String endpointId, DiscoveredEndpointInfo discoveredEndpointInfo) if (descoperitEndpointInfo.getServiceId () equalsIgnoreCase (SERVICE_ID)) Nearby.Connections.requestConnection (mGoogleApiClient, "Name" , mConnectionLifecycleCallback);  @Overide public void peEndpointLost (String endpointId) Log.e ("Tuts +", "Deconectat"); ;

După ce descoperitorul dvs. sa conectat la serviciile Google Play, puteți iniția descoperirea cu următoarea comandă:

Nearby.Connections.startDiscovery (mGoogleApiClient, SERVICE_ID, mEndpointDiscoveryCallback, noul DiscoveryOptions (Strategy.P2P_STAR));

În cele din urmă, când doriți să vă deconectați de la un agent de publicitate, puteți utiliza funcția disconnectFromEndpoint () din API-ul Connections Nearby. În general, este o idee bună să faceți acest lucru în dvs. Activitate„s onDestroy () suna inapoi.

În apropiere.Connections.disconnectFromEndpoint (mGoogleApiClient, mEndpoint);

Concluzie

În acest articol ați aflat despre API-ul Close Connections 2.0 pentru Android în contextul creării unei aplicații însoțitoare pentru un dispozitiv Android Things IoT. 

Merită menționat faptul că acest API poate fi folosit pentru orice dispozitive Android pe care doriți să le conectați, de la telefoane și tablete la casete Android TV și smartwatch-uri Android Wear. API oferă o modalitate simplă de a vă conecta și de a comunica fără utilizarea Internetului sau a unui router centralizat și adaugă un utilitar extraordinar colecției dvs. de instrumente pentru dezvoltare Android.

!

Cod