Sending data to android wear device

I'm trying to send a String array from my phone to my clothes, I created a service on my phone that should send data using this code:

public class SendDataService extends Service { private static final String TAG = "SendDataService"; @Override public void onCreate(){ GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() { @Override public void onConnected(Bundle connectionHint) { Log.d(TAG, "onConnected: " + connectionHint); // Now you can use the data layer API } @Override public void onConnectionSuspended(int cause) { Log.d(TAG, "onConnectionSuspended: " + cause); } }) .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() { @Override public void onConnectionFailed(ConnectionResult result) { Log.d(TAG, "onConnectionFailed: " + result); } }) .addApi(Wearable.API) .build(); mGoogleApiClient.connect(); String[] eventStrings = Events.eventsString(Events.readCalendarEvent(this)); PutDataMapRequest dataMap = PutDataMapRequest.create("/events"); dataMap.getDataMap().putStringArray("events", eventStrings); PutDataRequest request = dataMap.asPutDataRequest(); PendingResult<DataApi.DataItemResult> pendingResult = Wearable.DataApi .putDataItem(mGoogleApiClient, request); mGoogleApiClient.disconnect(); } 

and from the clock I try to get it in my main action using this code:

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_agenda_wear); this.context = this; GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() { @Override public void onConnected(Bundle connectionHint) { Log.d(TAG, "onConnected: " + connectionHint); // Now you can use the data layer API } @Override public void onConnectionSuspended(int cause) { Log.d(TAG, "onConnectionSuspended: " + cause); } }) .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() { @Override public void onConnectionFailed(ConnectionResult result) { Log.d(TAG, "onConnectionFailed: " + result); } }) .addApi(Wearable.API) .build(); mGoogleApiClient.connect(); PendingResult<DataItemBuffer> results = Wearable.DataApi.getDataItems(mGoogleApiClient); results.setResultCallback(new ResultCallback<DataItemBuffer>() { @Override public void onResult(DataItemBuffer dataItems) { if (dataItems.getCount() != 0) { DataMapItem dataMapItem = DataMapItem.fromDataItem(dataItems.get(0)); // This should read the correct value. AgendaWear.this.eventString = dataMapItem.getDataMap().getStringArray("events"); } dataItems.release(); } }); mGoogleApiClient.disconnect(); final WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub); stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() { @Override public void onLayoutInflated(WatchViewStub stub) { if (AgendaWear.this.eventString == null){ Toast.makeText(AgendaWear.this, "No data",Toast.LENGTH_LONG).show(); AgendaWear.this.eventString = new String[0]; } AgendaWear.listItems = eventArray(AgendaWear.this.eventString); mListView = (WearableListView) stub.findViewById(R.id.listView); mListView.setAdapter(new MyAdapter(AgendaWear.this)); mListView.setClickListener(AgendaWear.this); } }); } 

But unfortunately, I always get toast without data, and I'm a little stuck here, I have the line <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> both for wearing and for the mobile part of my application, but I do not seem to receive any data. Thank you in advance for your help.

+5
source share
1 answer

Maybe I can help.

This code works for me, sends an array of strings from the device, which should be received in a wearable:

Device code:

 @Override public void onCreate() { googleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(Wearable.API) .build(); googleApiClient.connect(); } @Override public void onConnected(Bundle bundle) { String [] myData = new String[]{"data1", "data2", "data3"}; new DataTask (getActivity(), myData, myListener).execute(); } class DataTask extends AsyncTask<Node, Void, Void> { private final String[] contents; private MyListener myListener; Context c; public DataTask (Context c, String [] contents, MyListener myListener) { this.c = c; this.contents = contents; this.myListener = myListener; } @Override protected Void doInBackground(Node... nodes) { PutDataMapRequest dataMap = PutDataMapRequest.create ("/myapp/myevent"); dataMap.getDataMap().putStringArray("contents", contents); PutDataRequest request = dataMap.asPutDataRequest(); DataApi.DataItemResult dataItemResult = Wearable.DataApi .putDataItem(googleApiClient, request).await(); Log.d ("[DEBUG] SendDataCoolTask - doInBackground", "/myapp/myevent" status, "+getStatus()); return null; } } 

Wearable Code:

 @Override public void onConnected(Bundle bundle) { Wearable.DataApi.addListener(googleApiClient, this); } @Override public void onDataChanged(DataEventBuffer dataEvents) { for (DataEvent event: dataEvents) { Log.d("[DEBUG] DeviceService - onDataChanged", "Event received: " + event.getDataItem().getUri()); String eventUri = event.getDataItem().getUri().toString(); if (eventUri.contains ("/myapp/myevent")) { DataMapItem dataItem = DataMapItem.fromDataItem (event.getDataItem()); String[] data = dataItem.getDataMap().getStringArray("contents"); Log.d("[DEBUG] DeviceService - onDataChanged", "Sending timeline to the listener"); myListener.onDataReceived(data); } } } 
+7
source

Source: https://habr.com/ru/post/1200781/


All Articles