Macedonian (Македонски јазик) translation by Filip Stefanov (you can also view the original English article)
Една од првите работи кои корисниците ќе сакаат да ја направат со новиот паметен домашен уред е да го поврзат на својата безжична мрежа. Многу IoT уреди немаат екран или тастатура, па така, начин како да го направите тоа е да дозволите корисниците да ги спарат смартфонот со уредот за да можат да го контролираат и конфигурираат. Ова е како работат Nest и Google Home, помеѓу останатите, а Nearby Connections 2.0 API го овозможува тоа.

Во оваа статија ќе добиете вовед во Nearby Connections 2.0 API и како може
да се искористи за да спари Android
смартфон со Android Things
уред, со цел да им помогне на корисниците да го искусат придружничкиот
уред.
Што е Nearby Connections API?
Nearby Connections API дозволува два уреди да комуницираат еден со друг директно преку Bluetooth, или безжично, без да се користи централна пристапна точка. Има две улоги кои уредот може да ги превземе: огласник, кој им дава до знаење на другите уреди дека е слободен за поврзување, и откривач, кој се обидува да пронајде огласници и да се поврзе со нив. Кога мноштво од уреди (исто така познати и како „крајни точки“ во оваа фаза) се меѓусебно поврзани, тие можат да испраќаат податоци кон било која друга крајна точка во мрежата на Nearby Connections.
Има две стратегии кои Nearby Connections API може да ги користи за да поврзува уреди. Првата, P2P_STAR, е наједноставна за работа. Таа се состои од еден огласник кој може да поддржи повеќе откривачи да се поврзуваат со него. Втората, P2P_CLUSTER, дозволува поврзување кон колкав и да е број на уреди, и да прифаќа конекции од нив, од колкав и да е број на уреди. Ова создава испреплетена мрежа со помалку централизирана точка на неуспех, иако исто така зафаќа повеќе проток. Оваа стратегија е идеална за помали пејлоудови што не треба да минуваат преку централен уред, како што е кај игрите.
Овој туторијал ќе се концентрира на користење на пообичната ѕвезда стратегија за да се конектира со IoT уредот како огласник и ќе го користи смартфонот на корисникот како откривач. Меѓутоа, до крајот, исто така треба да имате доволно информации за да ја воведите и кластер стратегија.
Ајде да се подготвиме!
Ќе има два модули за овој туторијал: мобилната апликација и Android Things апликацијата. Кога тие ќе ги создадете во Android Studio, ќе треба да ја опфатите зависноста на Google Play Services од Nearby Connections во модул-нивото build.gradle фајлот за двете апликации.
compile ‘com.google.android.gms:play-services-nearby:11.6.2’
Кога ќе ја вклучите gradle синхронизацијата, отворете ги AndroidManifest.xml фајловите за двата модула и опфатете ги следните дозволи
вклучени во application
јазлите.
<uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
На Android Things уредите ќе им бидат доделени овие дозволи во уредот по рестартирањето, иако ќе треба да побарате дозвола за локацијата од корисниците на телефонската апликација.
MainActivity
класата и во things и во mobile модулите
ќе треба да се воведи во интерфејсот кој се користи за повратните повици во Google Play Services, како во примерот:
public class MainActivity extends FragmentActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { @Override public void onConnected(@Nullable Bundle bundle) {} @Override public void onConnectionSuspended(int i) {} @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {} }
Кога веќе ќе валидирате дека корисникот ги има правилните
дозволи за локација во onCreate()
,
можете да започнете со поврзување со Google Play Services за да го користите Nearby Connections API.
mGoogleApiClient = new GoogleApiClient .Builder(this, this, this) .addApi(Nearby.CONNECTIONS_API) .enableAutoManage(this, this) .build();
Кога GoogleApiClient
ќе заврши со поврзување, onConnected()
методот ќе биде повикан. Ова е моментот кога ќе започнете со огласен или
откривачки процес за вашиот уред. Во надополнение на тоа, и обете апликации ќе бараат service id, кој е уникатен String
идентификатор.
private static final String SERVICE_ID = "UNIQUE_SERVICE_ID";
Огласување на Nearby Connections
Кога
работите со Nearby
Connections API, ќе треба
да создадете ConnectionLifecycleCallback
кој, како
што навестува името, ќе биде активиран на разни настани за connection
lifecycle. За ова
демо, ќе го користиме само onConnectionInitiated()
методот.
Тоа ќе зачува референца кон првата крајна точка која се обидува да се поврзе со
него, да го прифати поврзувањето и да престане со огласување. Ако поврзувањето
не е успешно, апликацијата може да го рестартира огласувањето.
private final ConnectionLifecycleCallback mConnectionLifecycleCallback = new ConnectionLifecycleCallback() { @Override public void onConnectionInitiated(String endpointId, ConnectionInfo connectionInfo) { endpoint = endpointId; Nearby.Connections.acceptConnection(mGoogleApiClient, endpointId, mPayloadCallback) .setResultCallback(new ResultCallback<com.google.android.gms.common.api.Status>() { @Override public void 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) {} };
Можете да
забележите дека горниот метод исто така се навраќа на PayloadCallback
објект. Овој
објект има методи кои се повикани кога пејлоуд од податоци е испратен од
огласникот до крајна точка, исто како и кога податоци се примени од крајна
точка. onPayloadReceived()
методот е каде што ќе ракуваме со било какво испраќање
на податоци до нашиот Android Things уред. Овој
метод го содржи Payload
објектот кој може да се претвори во ревија од бајти, и
String
кој ја
претставува адресата на крајната точка од уредот кој што испраќа.
private PayloadCallback mPayloadCallback = new PayloadCallback() { @Override public void onPayloadReceived(String endpoint, Payload payload) { Log.e("Tuts+", new String(payload.asBytes())); } @Override public void onPayloadTransferUpdate(String endpoint, PayloadTransferUpdate payloadTransferUpdate) {} };
Во овој момент, можете да започните со огласување на вашиот IoT уред со следниот метод:
Nearby.Connections.startAdvertising( mGoogleApiClient, "Device Name", SERVICE_ID, mConnectionLifecycleCallback, new AdvertisingOptions(Strategy.P2P_STAR));
Можете да забележите дека ова е моментот кога ја употребуваме P2P_STAR стратегијата на нашата Nearby Connections мрежа.
Кога ќе сакате да испратите пејлоуд до друг уред, можете да
го користите Nearby.Connections.sendPayload()
методот со Google API клиентската
референца, името на вашата крајна точка и ревија од бајти од податоците кои
сакате да ги испратите.
Nearby.Connections.sendPayload(mGoogleApiClient, endpoint, Payload.fromBytes("Message".getBytes()));
Совет: Вклучете го WiFi-то при рестартирање.
Еден трик кој го открив дека е корисен кога работите со Nearby Connections API на Android Things уред е да го превклучите WiFi-то при рестартирање, бидејќи уредот може да остане со исклучена безжична мрежа ако се исклучи или изгуби струја додека огласува. Можете да го направите ова со повраќање на WiFiManager
системски сервис и го повикува setWifiEnabled()
wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); wifiManager.setWifiEnabled(true);
Откријте уреди со Nearby Connections
Откривањето
на уреди следи во главно слична шема како и огласувањето. Уредот ќе се поврзи со Google
API Client и ќе
започне со откривање. Кога ќе се пронајде огласник, откривачот ќе побара да се
поврзи со огласникот. Ако огласникот го одобри барањето, тогаш двата уреди ќе се
поврзат и ќе можат да разменуваат пејлоудови меѓу себе. Откривачот ќе користи PayloadCallback
исто како и
огласникот.
private PayloadCallback mPayloadCallback = new PayloadCallback() { @Override public void onPayloadReceived(String s, Payload payload) { Log.e("Tuts+", new String(payload.asBytes())); } @Override public void onPayloadTransferUpdate(String s, PayloadTransferUpdate payloadTransferUpdate) {} };
Откривачот (на мобилната апликација) ConnectionLifecycleCallback
исто така ќе
изгледа сличен како оној на огласникот:
private final 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(String endpointId, ConnectionResolution result) {} @Override public void onDisconnected(String endpointId) {} };
Она што е различно е тоа што откривачите ќе бараат EndpointDiscoveryCallback
кој
ќе се користи кога е пронајден огласник, но со кој сеуште се немаат поврзано.
Овој објект ќе го започне барањето за поврзување со огласникот.
private final EndpointDiscoveryCallback mEndpointDiscoveryCallback = new EndpointDiscoveryCallback() { @Override public void 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"); } };
Кога вашиот откривач веќе ќе се поврзи со Google Play Services, можете да започнете откривање со следнава команда:
Nearby.Connections.startDiscovery( mGoogleApiClient, SERVICE_ID, mEndpointDiscoveryCallback, new DiscoveryOptions(Strategy.P2P_STAR));
За крај, кога ќе сакате да се дисконектирате од огласник,
можете да го користите disconnectFromEndpoint()
методот од Nearby
Connections API. Во главно, добра идеја е да го направите ова во вашиот onDestroy()
повратен
повик на Activity
.
Nearby.Connections.disconnectFromEndpoint(mGoogleApiClient, mEndpoint);
Заклучок
Во оваа статија научивте за Nearby Connections 2.0 API од Android во врска со процесот за создавање на придружничка апликација за Android Things IoT уред.
Не вреди ништо што овој API може да се искористи за било кои Android уреди што сакате да се во мрежа, од телефони и таблети до Android TV boxes и Android Wear паметни часовници. API-то обезбедува едноставен начин да се поврзете и да комуницирате без да користите интернет или централизиран рутер, и додава одлична полезност на вашата колекција од алатки за развој на Android.
Додека сте овде, проверете некои од нашите други објави за развој на Android Things IoT.
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weeklyEnvato Tuts+ tutorials are translated into other languages by our community members—you can be involved too!
Translate this post