Отправка данных на носимое устройство с телефона через WearableListenerService

У меня есть циферблат, который я хочу отправить несколько строк с помощью уровня данных. Я следовал руководству, добавив службу в manifest и создание класса DataLayerListenerService.

Что я должен сделать, чтобы отправить данные на носимое устройство из службы? Я сделал это до того, как использовал PutDataRequest в моей конфигурации, которая работает. Теперь я хочу периодически отправлять статистику батареи, информацию о погоде и т. д. на носимые устройства. Как мне это сделать?

Вот мой класс до сих пор:

public class DataLayerListenerService extends WearableListenerService {

private static final String TAG = DataLayerListenerService.class.getSimpleName();
public static final String EXTRAS_PATH = "/extras";
private static final String START_ACTIVITY_PATH = "/start-activity";
private static final String DATA_ITEM_RECEIVED_PATH = "/data-item-received";
private GoogleApiClient mGoogleApiClient;

public static void LOGD(final String tag, String message) {
    if (Log.isLoggable(tag, Log.DEBUG)) {
        Log.d(tag, message);
    }
}

@Override
public void onCreate() {
    super.onCreate();
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addApi(Wearable.API)
            .build();
    mGoogleApiClient.connect();
}

@Override
public void onDataChanged(DataEventBuffer dataEvents) {
    LOGD(TAG, "onDataChanged: " + dataEvents);
    if (!mGoogleApiClient.isConnected() || !mGoogleApiClient.isConnecting()) {
        ConnectionResult connectionResult = mGoogleApiClient
                .blockingConnect(30, TimeUnit.SECONDS);
        if (!connectionResult.isSuccess()) {
            Log.e(TAG, "DataLayerListenerService failed to connect to GoogleApiClient, "
                    + "error code: " + connectionResult.getErrorCode());
            return;
        }
    }

    // Loop through the events and send a message back to the node that created the data item.
    for (DataEvent event : dataEvents) {
        Uri uri = event.getDataItem().getUri();
        String path = uri.getPath();
        if (EXTRAS_PATH.equals(path)) {
            // Get the node id of the node that created the data item from the host portion of
            // the uri.
            String nodeId = uri.getHost();
            // Set the data of the message to be the bytes of the Uri.
            byte[] payload = uri.toString().getBytes();

            // Send the rpc
            Wearable.MessageApi.sendMessage(mGoogleApiClient, nodeId, DATA_ITEM_RECEIVED_PATH,
                    payload);
        }
    }
}

person Timmo    schedule 23.07.2016    source источник


Ответы (1)


Во-первых, создайте экземпляр GoogleApiClient, когда вы хотите подключиться к один из API Google, предоставляемых в библиотеке сервисов Google Play. Вам необходимо создать экземпляр GoogleApiClient («Клиент Google API»). Клиент Google API обеспечивает общую точку входа для всех служб Google Play и управляет сетевым подключением между устройством пользователя и каждой службой Google.

Определите WearableListenerService, который получает сообщение. Он получает события от других узлов, такие как изменения данных, сообщения или события подключения.

Отправьте сообщение через MessageApi, сообщения доставляется на подключенные сетевые узлы. К портативному устройству пользователя можно подключить несколько носимых устройств. Каждое подключенное устройство в сети считается узлом. При наличии нескольких подключенных устройств необходимо учитывать, какие узлы получают сообщения.

Затем реализуйте MessageApi.MessageListener, используемый с addListener(GoogleApiClient, MessageApi.MessageListener) для получения сообщений о событиях. Вызывающие абоненты, желающие получать уведомления о событиях в фоновом режиме, должны использовать WearableListenerService. Затем получите сообщение и используйте LocalBroadcastManager для уточнения сообщения и отображения значения износа.

Вот соответствующий билет SO: Отправить сообщение с носимого устройства на телефон и тут же ответить

person Android Enthusiast    schedule 24.07.2016