使用推送通知IntentService中的GoogleApiClient将数据发送到Android Wear

这是一个跟进问题……
Android Wear Bundled Notifications and Background Images

我想创建一个Android Wear GridViewPager布局,当新的推送通知进入时,它会被创建.

下面是我的代码,当新消息进入时初始化Googleapiclient连接,然后我可以将数据发送到Wear应用程序,然后创建GridView寻呼机.

我的问题是Googleapiclient永远不会得到连接.我已成功运行sdk文件夹中的Synchonizednotifications示例应用程序,因此我知道我的设备和手表已正确配对.

以下是当前代码……

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 ResultCallbackFailed 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");
        }
    }
}
最佳答案
看起来您的数据不会发生变化.当您使用DataItem API方法时,不要将其视为从设备向可穿戴设备发送数据(反之亦然).相反,请记住,您只是在操作跨设备共享的缓存:您正在同步数据,而不是传输数据.

这最终意味着除非数据发生更改,否则不会触发侦听器.这就是为什么该方法被称为onDataChanged().底层API可以智能地使用PutDataRequest更新缓存,从而提高效率.如果您正在同步包含相同信息的有效内容,则不会注意到任何内容.

所以试试这个:为你的有效载荷添加一个时间戳.也许像putDataMapRequest.getDataMap().putLong(“timestamp”,System.currentTimeMillis());您的有效负载每次都会有所不同,您应该会看到onDataChanged()现在会触发.

是的,我花了一段时间来搞清楚这一点!

相关文章

这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内...