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:
- "Actividad predeterminada no encontrada" para una aplicación portátil creada con la plantilla de Android Studio
- Android Wear ¿Cuánto tiempo permanecen las entradas de DataMap?
- ¿Por qué Android Wear DataMap no tiene un método putIntArray?
- ¿Cambia el tiempo de uso de Android a Celsius?
- ¿Cómo abrir la aplicación principal de la usable?
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
- Creación de un Wear AVD
- Android Wear: ¿CardScrollView no puede desplazarse?
- WearableListenerService onMessageReceived no se llama al dispositivo
- Error "No se encontró ningún identificador de recurso para el atributo 'rectLayout'"
- Pruebas de instrumentación de Android con múltiples emuladores
- GoogleApiClient onConnected nunca llamado Dispositivo usable
- Wearable no instalar la aplicación (criterios de funcionalidad de Android Wear)
- Adición de capacidades de voz en Android Wear
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