34361 Пользователи и пользовательницы: гендерный вопрос в интерфейсе
Пользователи и пользовательницы: гендерный вопрос в интерфейсе

Пользователи и пользовательницы: гендерный вопрос в интерфейсе

❤ 271 , Категория: Новости,   ⚑ 26 Мар 2018г

Одна из первых вещей, которые пользователи захотят сделать с новым домашним “умным” устройством – это подключить его к беспроводной сети. Но на многих IoT-устройствах отсутствует экран или клавиатура, поэтому одним из способов сделать это является предоставление пользователям возможности соединять смартфон с устройством, чтобы они могли контролировать и настраивать устройство. Вот, например, как работает Nest и Google Home с Nearby Connections 2.0 API.

Пользователи и пользовательницы: гендерный вопрос в интерфейсе

В этой статье вы познакомитесь с Nearby Connections 2.0 API и с тем, как его можно использовать для подключения Android-смартфона к устройству на Android Things.

Что такое Nearby Connections API?

Nearby Connections API позволяет двум устройствам взаимодействовать друг с другом напрямую по Bluetooth или беспроводной сети без использования централизованной точки доступа. Существует две роли, которые может принять на себя устройство: рекламодатель (advertiser), который позволяет другим устройствам знать, что он доступен для подключения, и первооткрыватель (discoverer), который пытается найти рекламодателей и подключиться к ним. Когда набор устройств соединяется вместе (этот набор на данном этапе называется конечной точкой), он может отправлять данные в любую другую конечную точку в сети Nearby Connections.

Существует две стратегии, которые Nearby Connections API может использовать для соединения устройств. Первый, P2P_STAR, является самым простым для понимания и работы. Он состоит из одного рекламодателя, который может поддерживать несколько первооткрывателей, подключающихся к нему. Второй, P2P_CLUSTER, позволяет любому числу устройств подключаться и принимать соединения от любого другого числа устройств. Это создает децентрализованную и более отказоустойчивую mesh-сеть, хотя она и потребляет больше трафика. Эта стратегия идеально подходит для небольшой полезной нагрузки, которая не должна проходить через центральное устройство, например, для игр.

В этом туториале основное внимание будет уделено использованию более простой стратегии STAR для подключения устройства 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 для обоих модулей и включите следующие разрешения в нодах приложения.

<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 как для вещи, так и для мобильного приложения, потребуется реализовать интерфейсы, используемые для обратных вызовов сервисов Google Play, например:

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 (). Здесь вы начнете отправлять рекламу или обнаруживать другие устройства. Кроме того, для обоих приложений потребуется идентификатор службы, который является уникальной строкой.

private static final String SERVICE_ID = "UNIQUE_SERVICE_ID";

Реклама в Nearby Connections

При работе с Nearby Connections API вам необходимо создать ConnectionLifecycleCallback, который, как следует из названия, будет запускаться в различных событиях жизненного цикла соединения. Для этой демонстрации мы будем использовать только метод 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, который можно преобразовать в массив байтов, и строку, представляющую адрес конечной точки отправляющего устройства.

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.

Когда вы хотите отправить payload на другое устройство, вы можете использовать метод Near.Connections.sendPayload () с помощью ссылки на клиентский интерфейс Google API, имени конечной точки и массива байтов данных, которые вы хотите отправить.

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

Совет. Включите Wi-Fi при перезагрузке

Один трюк, который я нашел полезным во время работы с 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 () вашей активности.

Nearby.Connections.disconnectFromEndpoint(mGoogleApiClient, mEndpoint);

Вывод

В этой статье вы узнали о работе с Nearby Connections 2.0 API для Android в контексте создания сопутствующего приложения для устройства Android Things.

Стоит отметить, что этот API можно использовать для любых Android-устройств, которые вы хотели бы объединить вместе, от телефонов и планшетов до Android-телевизоров и умных часов Android Wear. API обеспечивает простой способ подключения и общения без использования интернета или централизованного маршрутизатора и добавляет интересный функционал в вашу коллекцию инструментов для Android-разработки.


По теме: ( из рубрики Новости )

Оставить отзыв

Ваш адрес email не будет опубликован. Обязательные поля помечены *

*
*

семнадцать + пятнадцать =

Похожие записи

наверх