Koble Android ting til en smarttelefon med nærliggende tilkoblinger 2.0

En av de første tingene brukerne vil ha med en ny smart hjemme-enhet, får det på sitt trådløse nettverk. Mange IoT-enheter mangler en skjerm eller et tastatur, slik at en måte å gjøre dette på er å la brukerne koble en smarttelefon til enheten slik at de kan styre og konfigurere enheten. Dette gjør hvordan Nest og Google Home-arbeid, blant annet, og API-en i nærheten Connections 2.0 gjør det mulig.

I denne artikkelen får du en introduksjon til API-en i nærheten Connections 2.0 og hvordan den kan brukes til å koble en Android-smarttelefon til en Android Things-enhet for å gi brukerne en følgesvennopplevelse.

Hva er API-en i nærheten?

API-en i nærheten lar to enheter kommunisere med hverandre direkte over Bluetooth eller trådløs uten bruk av et sentralisert tilgangspunkt. Det er to roller som en enhet kan ta på seg: annonsør, som lar andre enheter vite at det er tilgjengelig for å være koblet til, og oppdag, som forsøker å finne annonsører og koble til dem. Når et sett med enheter (også kjent som "endepunkter" på dette stadiet) har koblet sammen, kan de sende data til et hvilket som helst annet sluttpunkt på Network Connections. 

Det er to strategier som API-en i nærheten kan bruke til å koble sammen enheter. Den første, P2P_STAR, er den enkleste å jobbe med. Den består av en annonsør som kan støtte flere oppdagere som kobler til den. Den andre, P2P_CLUSTER, tillater et antall enheter å koble til og akseptere tilkoblinger fra et hvilket som helst annet antall enheter. Dette skaper et nettverksnettverk med et mindre sentralisert punkt, men det tar også mer båndbredde. Denne strategien er ideell for mindre nyttelaster som ikke trenger å gå gjennom en sentral enhet, for eksempel for spill. 

Denne opplæringen vil fokusere på å bruke den enklere stjernestrategien for å koble IoT-enheten til som en annonsør, og vil bruke brukerens smarttelefon som oppdagler. Men på slutten bør du også ha nok informasjon til å implementere en klyngestrategi også.

La oss få satt opp!

Det vil være to moduler for denne opplæringen: mobilappen og appen Android Things. Når du har opprettet dem i Android Studio, må du inkludere avhengigheten av Google Play Services for nærliggende tilkoblinger på modulnivået build.gradle filen for begge appene.

kompilere 'com.google.android.gms: play-services-i nærheten: 11.6.2'

Når du har kjørt en gradvis synkronisering, åpner du AndroidManifest.xml filer for begge modulene og inkludere følgende tillatelser i applikasjon noder.

    

Android Things-enheter vil ha disse tillatelsene gitt til enheten etter omstart, selv om du må be om stedsstillatelse fra brukere i telefonappen.

De Hoved aktivitet klasse i begge tingene og mobil moduler må implementere grensesnittene som brukes til tilbakeringinger fra Google Play Services, slik som:

offentlig klasse MainActivity utvider FragmentActivity implementerer GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener @Overtrid offentlig tomgang påConnected (@Nullable Bundle Bundle)  @Overtrid offentlig tomgang påConnectionSuspended (int i)  @Overtrid offentlig tomgang onConnectionFailed (@NonNull ConnectionResult connectionResult)  

Når du har validert at brukeren har de riktige stedstillatelsene i onCreate (), Du kan begynne å koble til Google Play Services for å bruke API-en for nærliggende tilkoblinger.

mGoogleApiClient = ny GoogleApiClient .Builder (dette, dette, dette) .addApi (Nearby.CONNECTIONS_API) .enableAutoManage (dette, dette) .build ();

Når GoogleApiClient er ferdig med å koble til, onConnected () Metoden vil bli kalt. Her vil du starte reklame- eller oppdagelsesprosessen for enheten din. I tillegg vil begge programmene trenge et service-ID, som er unikt string identifikator.

privat statisk sluttstreng SERVICE_ID = "UNIQUE_SERVICE_ID";

Reklame på nærliggende tilkoblinger

Når du arbeider med API for nærliggende tilkoblinger, må du opprette en ConnectionLifecycleCallback Det vil, som navnet antyder, bli utløst på ulike livscyklusbegivenheter. For denne demoen vil vi bare bruke onConnectionInitiated () metode. Det lagrer en referanse til det første sluttpunktet som forsøker å koble til det, aksepterer tilkoblingen, og deretter slutter å annonsere. Hvis forbindelsen ikke lykkes, kan appen starte reklamen på nytt.

privat endelig ConnectionLifecycleCallback mConnectionLifecycleCallback = ny ConnectionLifecycleCallback () @Overtrid offentlig tomgang onConnectionInitiated (String endpointId, ConnectionInfo connectionInfo) endpoint = endpointId; I nærheten.Connections.acceptConnection (mGoogleApiClient, endpointId, mPayloadCallback) .setResultCallback (nytt resultatCallback() @Overtrid offentlig tomgang onResult (@NonNull com.google.android.gms.common.api.Status status) if (status.isSuccess ()) // Connection accepted); Nearby.Connections.stopAdvertising (mGoogleApiClient);  @Override public void onConnectionResult (String endpointId, ConnectionResolution result)  @Override public void onDisconnected (String endpointId) ;

Du har kanskje lagt merke til at ovennevnte metode også refererer til a PayloadCallback gjenstand. Dette objektet har metoder som kalles når en nyttelast av data sendes fra annonsøren til et sluttpunkt, samt når data mottas fra et sluttpunkt. De onPayloadReceived () Metoden er hvor vi vil håndtere data som sendes til vår Android Things-enhet. Denne metoden inneholder nyttelast objekt som kan omdannes til en rekke byte, og a string som representerer sluttpunktsadressen til sendeenheten.

privat PayloadCallback mPayloadCallback = nytt PayloadCallback () @Overtrid offentlig tomgang onPayloadReceived (String endpoint, nyttelasten) Log.e ("Tuts +", ny String (payload.asBytes ()));  @Override public void onPayloadTransferUpdate (String endpoint, PayloadTransferUpdate payloadTransferUpdate) ;

På dette tidspunktet kan du begynne å annonsere på din IoT-enhet med følgende metode:

I nærheten.Connections.startAdvertising (mGoogleApiClient, "Enhetsnavn", SERVICE_ID, mConnectionLifecycleCallback, nye AdvertisingOptions (Strategy.P2P_STAR));

Du kan merke at dette er stedet vi bruker P2P_STAR-strategien til vårt nærliggende nettverk.

Når du vil sende en nyttelast til en annen enhet, kan du bruke Nearby.Connections.sendPayload () Metode med Google API-klientreferansen, navnet på sluttpunktet ditt og et byte-utvalg av dataene du vil sende.

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

Tips: Aktiver WiFi på Reboot

Et triks som jeg fant nyttig mens jeg jobber med API-en i nærheten av en Android Things-enhet, aktiverer Wi-Fi på omstart, da enheten kan ende opp med trådløs deaktivert hvis enheten slås av eller mister strøm mens den annonseres. Du kan gjøre dette ved å hente WifiManager systemtjeneste og samtale setWifiEnabled ().

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

Oppdag enheter med nærliggende tilkoblinger

Oppdage en enhet følger et stort sett lignende mønster for annonsering. Enheten vil koble til Google API-klienten og begynne å oppdage. Når en annonsør er funnet, vil oppdageren be om å koble til annonsøren. Hvis annonsøren godkjenner forespørselen, vil de to enhetene koble til og kunne sende nyttelast frem og tilbake. Oppdageren vil bruke en PayloadCallback akkurat som annonsøren.

privat PayloadCallback mPayloadCallback = nytt PayloadCallback () @Overtrid offentlig tomgang onPayloadReceived (String s, Payload nyttelast) Log.e ("Tuts +", ny String (payload.asBytes ()));  @Override public void onPayloadTransferUpdate (String s, PayloadTransferUpdate payloadTransferUpdate) ;

Oppdagerens (mobilapps) ConnectionLifecycleCallback vil også se ut som annonsøren er:

privat endelig ConnectionLifecycleCallback mConnectionLifecycleCallback = ny ConnectionLifecycleCallback () @Overtrid offentlig tomgang onConnectionInitiated (String endpointId, ConnectionInfo connectionInfo) Nearby.Connections.acceptConnection (mGoogleApiClient, endpointId, mPayloadCallback); mEndpoint = endepunktId; Nearby.Connections.stopDiscovery (mGoogleApiClient);  @Override public void onConnectionResult (String endpointId, ConnectionResolution result)  @Override public void onDisconnected (String endpointId) ;

Hva er forskjellig er at oppdagere vil kreve en EndpointDiscoveryCallback Det vil bli brukt når en annonsør er funnet, men ennå ikke koblet til. Dette objektet vil initiere forespørselen om å koble til annonsøren.

privat slutt EndpointDiscoveryCallback mEndpointDiscoveryCallback = nytt EndpointDiscoveryCallback () @Overtrid offentlig tomgang onEndpointFound (String endpointId, DiscoveredEndpointInfo discoveredEndpointInfo) if (discoveredEndpointInfo.getServiceId). equalsIgnoreCase (SERVICE_ID)) Nearby.Connections.requestConnection (mGoogleApiClient, "Name", endpointId , mConnectionLifecycleCallback);  @Override public void onEndpointLost (String endpointId) Log.e ("Tuts +", "Disconnected"); ;

Når oppdageren din har koblet til Google Play Services, kan du starte oppdagelsen med følgende kommando:

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

Til slutt, når du vil koble fra en annonsør, kan du bruke disconnectFromEndpoint () metode fra API'en for nærliggende tilkoblinger. Det er vanligvis en god ide å gjøre dette i din Aktivitet's onDestroy () Ring tilbake.

Nearby.Connections.disconnectFromEndpoint (mGoogleApiClient, mEndpoint);

Konklusjon

I denne artikkelen har du lært om API for nærliggende tilkoblinger 2.0 for Android i sammenheng med å lage en ledsagerapp for en Android Things IoT-enhet. 

Det er verdt å merke seg at denne API-en kan brukes til alle Android-enheter som du vil nettverk sammen, fra telefoner og tabletter til Android TV-bokser og Android Wear smartwatches. API gir en enkel måte å koble til og kommunisere uten bruk av Internett eller en sentralisert ruter, og legger til et flott verktøy for samlingen av verktøy for Android-utvikling.

!