Envío de datos al dispositivo de desgaste de Android
Estoy tratando de enviar una matriz de cadena de mi teléfono a mi desgaste, he creado un servicio en mi teléfono que se supone que enviar los datos con este código:
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(); }
Y desde el reloj intento conseguirlo en mi actividad principal con este código:
- Implementación de aplicaciones Android Wearable en Moto 360 para propósitos de depuración
- Android Wear + Wearable ChannelApi openChannel no se abre con nodo remoto?
- ¿Se deben utilizar NotificationCompat y NotificationManagerCompat para que las notificaciones aparezcan en un portátil?
- ¿Cómo puedo crear una notificación diferente en el dispositivo y el desgaste?
- Obtenga el nivel de batería de los smartwatches conectados
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); } }); }
Pero por desgracia, siempre tengo la tostada "no data" y estoy un poco atascado aquí, tengo la línea <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
tanto en la parte de desgaste como en la móvil de mi aplicación, pero parece que no obtengo ningún dato. Gracias de antemano por su ayuda
- La imagen no está centrada en ActionPage en el dispositivo de desgaste androide 320x320
- WearableListView.Item falta en la biblioteca de soporte portátil 1.1
- Lea los datos de color / luz subyacentes de Android Wear?
- Android wear build-in aplicación versión mínima
- Android Wear: utiliza el color sólido especificado para el fondo de la notificación
- Caught a RuntimeException desde la implementación de stub de la carpeta
- ¿Cómo distribuyo mi Android Wear a usuarios alfa / beta en Google Play Store?
- Acceso a Android Wear Fit Data
Tal vez pueda ayudar.
Este código funciona para mí, envía una matriz de cadenas del dispositivo que se recibirá en el usable:
Código del dispositivo:
@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; } }
Código usable:
@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); } } }
- Mi proyecto de Android Studio sigue ejecutando mi antiguo proyecto / aplicación
- Android: Agregar vista dinámicamente en un diseño anidado