DataClient

public abstract classDataClientextendsGoogleApi<Wearable.WearableOptions>

Exposes an API for components to read or write {@linkplain DataItem data items} and {@linkplain Asset assets}.

ADataItemis synchronized across all devices in an Android Wear network. It is possible to set data items while not connected to any nodes. Those data items will be synchronized when the nodes eventually come online.

Data items are private to the application that created them, and are only accessible by that application on other nodes. They should generally be small in size, relying on {@linkplain Asset assets} for the transfer of larger, more persistent data objects such as images.

DataItem URI format

Each data item is identified by a URI, accessible with DataItem.getUri(), that indicates the item's creator and path. Fully specified URIs follow the following format:
wear://<node_id>/<path>
where <node_id> is thenode IDof the wearable node that created the data item, and <path> is an application-defined path. This means that given a data item's URI, callingUri.getHost() will return the creator's node ID.

Some methods, such as getDataItems(Uri)and addListener(OnDataChangedListener, Uri, int),support wildcard node IDs to match data items with the same path or path prefix created by multiple nodes. A wildcard data item URI has the following format:

wear://*/<path>
See method documentation for details.

Concurrency

Concurrent modification of data items from different nodes may result in inconsistent results. It is recommended that apps are built with some concept of ownership of data items. Two common patterns are:
  • Creator owns data items: Data items may be updated only by the original creator node.
  • Producer-consumer: One node is responsible for creating a data item, and a second node is responsible for deleting it, once it has been processed. Data items should have unique IDs when using this pattern, and data items should not be modified once created.

Nested Class Summary

@interface DataClient.FilterType Data filter types.
class DataClient.GetFdForAssetResponse Contains a file descriptor for the requested asset.
interface DataClient.OnDataChangedListener Used with DataClient.addListener(DataClient.OnDataChangedListener)to receive data events.

Constant Summary

String ACTION_DATA_CHANGED Data changed action for use in manifest-based listener filters.
int FILTER_LITERAL Filter type for getDataItems(Uri, int), deleteDataItems(Uri, int), addListener(OnDataChangedListener, Uri, int):if this filter is set, the given URI will be taken as a literal path, and the operation will apply to the matching item only.
int FILTER_PREFIX Filter type for getDataItems(Uri, int), deleteDataItems(Uri, int), addListener(OnDataChangedListener, Uri, int):if this filter is set, the given URI will be taken as a path prefix, and the operation will apply to all matching items.

Public Method Summary

abstract Task<Void>
addListener(DataClient.OnDataChangedListener listener)
Registers a listener to receive data item changed and deleted events.
abstract Task<Void>
addListener(DataClient.OnDataChangedListener listener,Uriuri, int filterType)
Registers a listener to receive data item changed and deleted events.
abstract Task<Integer>
deleteDataItems(Uriuri, int filterType)
Removes all specifieddata itemsfrom the Android Wear network.
abstract Task<Integer>
deleteDataItems(Uriuri)
Removes all specifieddata itemsfrom the Android Wear network.
abstract Task<DataItem>
getDataItem(Uriuri)
Retrieves a singleDataItem from the Android Wear network.
abstract Task<DataItemBuffer>
getDataItems(Uriuri, int filterType)
Retrieves alldata itemsmatching the provided URI and filter type, from the Android Wear network.
abstract Task<DataItemBuffer>
getDataItems()
Retrieves alldata itemsfrom the Android Wear network.
abstract Task<DataItemBuffer>
getDataItems(Uriuri)
Retrieves alldata itemsmatching the provided URI, from the Android Wear network.
abstract Task<DataClient.GetFdForAssetResponse>
getFdForAsset(DataItemAsset asset)
Retrieves aParcelFileDescriptorpointing at the bytes of an asset.
abstract Task<DataClient.GetFdForAssetResponse>
getFdForAsset(Assetasset)
Retrieves aParcelFileDescriptorpointing at the bytes of an asset.
abstract Task<DataItem>
putDataItem(PutDataRequest request)
Adds aDataItem to the Android Wear network.
abstract Task<Boolean>

Inherited Method Summary

Constants

public static finalString ACTION_DATA_CHANGED

Data changed action for use in manifest-based listener filters.

Constant Value: "com.google.android.gms.wearable.DATA_CHANGED"

public static final int FILTER_LITERAL

Filter type for getDataItems(Uri, int), deleteDataItems(Uri, int), addListener(OnDataChangedListener, Uri, int):if this filter is set, the given URI will be taken as a literal path, and the operation will apply to the matching item only.

Constant Value:0

public static final int FILTER_PREFIX

Filter type for getDataItems(Uri, int), deleteDataItems(Uri, int), addListener(OnDataChangedListener, Uri, int):if this filter is set, the given URI will be taken as a path prefix, and the operation will apply to all matching items.

Constant Value:1

Public Methods

public abstract Task<Void>addListener(DataClient.OnDataChangedListener listener)

Registers a listener to receive data item changed and deleted events. This call should be balanced with a call to removeListener(OnDataChangedListener),to avoid leaking resources.

Listeners will be called on the main thread, or the looper set inWearable.WearableOptions.

public abstract Task<Void>addListener(DataClient.OnDataChangedListener listener,Uriuri, int filterType)

Registers a listener to receive data item changed and deleted events. This call should be balanced with a call to removeListener(OnDataChangedListener),to avoid leaking resources.

uriandfilterTypecan be used to filter the data item changes sent to the listener. For example, ifuriand filterTypecreate a path prefix filter, then only items matching that prefix will be notified. Theurifollows the rules of the<data> element of <intent-filter>. The path is ignored if a URI host is not specified. The host should be an Android Wear node ID, or * to match any node. i.e., you should use:

wear://*/<path>
or
wear://<nodeId>/<path>

Listeners will be called on the main thread, or the looper set inWearable.WearableOptions.

Callers wishing to be notified of events in the background should useWearableListenerService.

public abstract Task<Integer> deleteDataItems(Uriuri, int filterType)

Removes all specifieddata itemsfrom the Android Wear network.

Ifuriis fully specified, this method will delete at most one data item. Ifuricontains a wildcard host, multiple data items may be deleted, since different nodes may create data items with the same path. SeeDataClient for details of the URI format.

ThefilterTypeparameter changes the interpretation of uri.For example, ifurirepresents a path prefix, all items matching that prefix will be deleted.

Returns
  • the number of deleted items.

public abstract Task<Integer> deleteDataItems(Uriuri)

Removes all specifieddata itemsfrom the Android Wear network.

Ifuriis fully specified, this method will delete at most one data item. Ifuricontains a wildcard host, multiple data items may be deleted, since different nodes may create data items with the same path. SeeDataClient for details of the URI format.

Returns
  • the number of deleted items.

public abstract Task<DataItem> getDataItem(Uriuri)

Retrieves a singleDataItem from the Android Wear network. A fully qualified URI must be specified. The URI's host must be the ID of the node that created the item.

SeeDataClient for details of the URI format.

public abstract Task<DataItemBuffer> getDataItems(Uriuri, int filterType)

Retrieves alldata itemsmatching the provided URI and filter type, from the Android Wear network.

The URI must contain a path. Ifuriis fully specified, at most one data item will be returned. Ifuricontains a wildcard host, multiple data items may be returned, since different nodes may create data items with the same path. SeeDataClient for details of the URI format.

Callers must call AbstractDataBuffer.release()on the returned buffer when finished processing results.

ThefilterTypeparameter changes the interpretation of uri.For example, ifurirepresents a path prefix, all items matching that prefix will be returned.

public abstract Task<DataItemBuffer> getDataItems()

Retrieves alldata itemsfrom the Android Wear network.

Callers must call AbstractDataBuffer.release()on the returned buffer when finished processing results.

public abstract Task<DataItemBuffer> getDataItems(Uriuri)

Retrieves alldata itemsmatching the provided URI, from the Android Wear network.

The URI must contain a path. Ifuriis fully specified, at most one data item will be returned. Ifuricontains a wildcard host, multiple data items may be returned, since different nodes may create data items with the same path. SeeDataClient for details of the URI format.

Callers must call AbstractDataBuffer.release()on the returned buffer when finished processing results.

public abstract Task<DataClient.GetFdForAssetResponse> getFdForAsset(DataItemAsset asset)

Retrieves aParcelFileDescriptorpointing at the bytes of an asset. Only assets previously stored in aDataItem may be retrieved.

public abstract Task<DataClient.GetFdForAssetResponse> getFdForAsset(Asset asset)

Retrieves aParcelFileDescriptorpointing at the bytes of an asset. Only assets previously stored in aDataItem may be retrieved.

public abstract Task<DataItem> putDataItem(PutDataRequest request)

Adds aDataItem to the Android Wear network. The updated item is synchronized across all devices.

public abstract Task<Boolean> removeListener(DataClient.OnDataChangedListener listener)

Removes a listener which was previously added through addListener(OnDataChangedListener)or addListener(OnDataChangedListener, Uri, int).