TWi*_*lly 5 android push-notification android-gridview wear-os
这是一个跟进问题... Android Wear捆绑通知和背景图像
我想创建一个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 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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
首先,如果这是您的完整代码,那么您实际上并没有打电话connect()给GoogleApiClient.
其次,connect()是异步的,所以你不能只做类似的事情
mGoogleApiClient.connect();
if (mGoogleApiClient.isConnected()) ...
Run Code Online (Sandbox Code Playgroud)
您需要等待连接回调.或者,如果您在后台线程中执行此代码,则可以使用blockingConnect().
看起来您的数据不会发生变化.当您使用DataItem API方法时,不要将其视为从设备向可穿戴设备发送数据(反之亦然).相反,请记住,您只是在操作跨设备共享的缓存:您正在同步数据,而不是传输数据.
这最终意味着除非数据发生更改,否则不会触发侦听器.这就是调用该方法的原因onDataChanged().底层API处理更新缓存,PutDataRequest智能地更高效.如果您正在同步包含相同信息的有效内容,则不会注意到任何内容.
所以试试这个:为你的有效载荷添加一个时间戳.也许像putDataMapRequest.getDataMap().putLong("timestamp", System.currentTimeMillis());你的有效载荷这样的东西每次都会有所不同,你应该看到它onDataChanged()现在会触发.
是的,我花了一段时间来搞清楚这一点!
| 归档时间: |
|
| 查看次数: |
2725 次 |
| 最近记录: |