uso tutorial studio propiedades numcolumns imagenes descargar con android push-notification android-gridview android-wear

tutorial - Uso de GoogleApiClient desde Push Notification IntentService para enviar datos a Android Wear



tutorial gridview android (2)

Esta es una pregunta de seguimiento para ... Notificaciones e imágenes de fondo incluidas de Android Wear

Me gustaría crear un diseño de Android Wear GridViewPager que se crea cuando aparece una nueva notificación de inserción.

A continuación se muestra mi código que inicializa una conexión GoogleApiClient cuando aparece un nuevo mensaje, así puedo enviar datos a la aplicación de desgaste, que luego crea el buscapersonas GridView.

Mi problema es que GoogleApiClient nunca obtiene una conexión. He ejecutado con éxito la aplicación de muestra SynchonizedNotifications en la carpeta sdk, así sé que mi dispositivo y mi reloj están emparejados correctamente.

A continuación está el código actual ...

public class GCMIntentService extends IntentService implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener{ @Override protected void onHandleIntent(Context context, Intent intent) { mGoogleApiClient = new GoogleApiClient.Builder(this) .addApi(Wearable.API) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .build(); ConnectionResult connectionResult = mGoogleApiClient.blockingConnect(30, TimeUnit.SECONDS); // Extract the payload from the message Bundle extras = intent.getExtras(); if (this.mGoogleApiClient.isConnected()) { // sending a simple message works MessageApi.SendMessageResult result = Wearable.MessageApi.sendMessage(mGoogleApiClient, node.getId(), "path", null).await(); PutDataMapRequest putDataMapRequest = PutDataMapRequest.create(Constants.BOTH_PATH); putDataMapRequest.getDataMap().putString(Constants.KEY_CONTENT, "content"); putDataMapRequest.getDataMap().putString(Constants.KEY_TITLE, "title"); PutDataRequest request = putDataMapRequest.asPutDataRequest(); // push data to wear app here Wearable.DataApi.putDataItem(mGoogleApiClient, request) .setResultCallback(new ResultCallback<DataApi.DataItemResult>() { @Override public void onResult(DataApi.DataItemResult dataItemResult) { if (!dataItemResult.getStatus().isSuccess()) { Log.e(TAG, "Failed to set the data, status: " + dataItemResult.getStatus().getStatusCode()); }else{ // get here, but no message received from wear Log.i(TAG,"SUCCESSFUL RESPONSE RECEIVED FROM WEAR"); } mGoogleApiClient.disconnect(); } }); } else { Log.e(TAG, "no Google API Client connection"); } } }


En primer lugar, si este es su código completo, en realidad no está llamando a connect() en GoogleApiClient .

En segundo lugar, connect() es asíncrono , por lo que no puedes hacer algo como

mGoogleApiClient.connect(); if (mGoogleApiClient.isConnected()) ...

En su lugar, debe esperar las devoluciones de llamadas de conexión . O bien, si está ejecutando este código en una cadena de fondo , puede usar blockingConnect() lugar.


Parece que sus datos no cambian constantemente. Cuando está utilizando el enfoque API de DataItem, no piense en ello como el envío de datos desde el dispositivo al wearable (o viceversa). En su lugar, recuerde que solo está manipulando un caché que se comparte entre dispositivos: está sincronizando datos, no transfiriéndolos .

En última instancia, significa que su oyente no se activará a menos que se modifiquen los datos. Es por eso que el método se llama onDataChanged() . La API subyacente maneja la actualización de la memoria caché con su PutDataRequest inteligente para ser mucho más eficiente. Si está sincronizando una carga que contiene la misma información, no notará nada.

Así que intente esto: agregue una marca de tiempo a su carga útil. Tal vez algo como putDataMapRequest.getDataMap().putLong("timestamp", System.currentTimeMillis()); Su carga útil será diferente cada vez, y debería ver que onDataChanged() ahora se activará.

Sí, me tomó un tiempo resolver esto!