Android wear数据层PutDataMapRequest不';行不通
我正在尝试实现android wear应用程序。我想我不明白什么,因为我的测试项目表现得很奇怪。这是一个非常简单的项目-活动,在移动设备上有两个按钮(“发送地图”和“发送消息”),在wear设备上有WearableListenerService,它在收到数据时创建通知 现在,当我尝试通过Wearable.DataApi发送数据时,Wearable上不会发生任何事情-数据会被发送,但Wearable上不会发生任何事情(Wearable一直与移动设备结合在一起)。我试着等了10-15分钟,但还是没有。但若我随后通过MessageApi发送数据,那个么消息会立即被传递,同时通过DataApi发送的所有数据项也会在那个时刻被接收 当我尝试使用DataApi(DataLayer或Quike)的google示例时,数据项似乎几乎是立即交付的,但几乎所有的示例都使用DataApi和MessageApi 另外,如果我在发送数据项后启动其中一个示例,那么所有已发送的项也会被发送 所以我想我的问题是:是我的代码中的bug导致了数据项无法交付吗?或者它应该是这样工作的,数据项只是在设备上累积,实际的交换大约每小时发生一次,而发送消息是触发即时传递的唯一方式 以下是我的数据项发送代码:Android wear数据层PutDataMapRequest不';行不通,android,wear-os,Android,Wear Os,我正在尝试实现android wear应用程序。我想我不明白什么,因为我的测试项目表现得很奇怪。这是一个非常简单的项目-活动,在移动设备上有两个按钮(“发送地图”和“发送消息”),在wear设备上有WearableListenerService,它在收到数据时创建通知 现在,当我尝试通过Wearable.DataApi发送数据时,Wearable上不会发生任何事情-数据会被发送,但Wearable上不会发生任何事情(Wearable一直与移动设备结合在一起)。我试着等了10-15分钟,但还是没有
String data = String.valueOf(System.currentTimeMillis());
PutDataMapRequest pdmr = PutDataMapRequest.create("/wear_test/"+data);
pdmr.getDataMap().putString("1", data);
PutDataRequest pdr = pdmr.asPutDataRequest();
Wearable.DataApi.putDataItem(googleApiClient,pdr);
以下是侦听器服务代码:
public class ListenerService extends WearableListenerService {
private static final String TAG = ListenerService.class.getSimpleName();
@Override
public void onCreate() {
super.onCreate();
Log.e(TAG, "Service created");
}
@Override
public void onDataChanged(DataEventBuffer dataEvents) {
super.onDataChanged(dataEvents);
Log.e(TAG, "onDataChanged(DataEventBuffer dataEvents) is called");
for (DataEvent dataEvent : dataEvents) {
Log.e(TAG, "Event type: "+dataEvent.getType()+", Uri:'"+dataEvent.getDataItem().getUri());
if(dataEvent.getType()==DataEvent.TYPE_CHANGED && dataEvent.getDataItem().getUri().getPath().contains("/wear_test")){
DataMap dataMap = DataMapItem.fromDataItem(dataEvent.getDataItem()).getDataMap();
String data = dataMap.getString("1");
Log.e(TAG, "Data received: " + data);
createNotification(data,505, "data map");
}
}
}
@Override
public void onMessageReceived(MessageEvent messageEvent) {
super.onMessageReceived(messageEvent);
if (messageEvent.getPath().contains("wear_test")){
String messageStr = new String(messageEvent.getData(), Charset.forName("UTF-8"));
Log.e(TAG, "Message received:"+messageStr);
createNotification(messageStr,808, "message");
}
}
private void createNotification(String data, int notificationCode, String suffix){
Notification notification = new Notification.Builder(this)
.setTicker(data)
.setSmallIcon(R.drawable.common_google_signin_btn_icon_light)
.setContentText(data+"\n"+suffix)
.setSubText(data+"\n"+suffix)
.build();
((NotificationManager) getSystemService(NOTIFICATION_SERVICE))
.notify(notificationCode, notification);
}
}
我也有同样的问题。我用计算机解决了这个问题 从文件中: 数据项将延迟不超过30分钟,这取决于连接的对等方,但预计会更快到达。 客户端应仅为需要立即交付的数据项设置紧急()
您能在可穿戴设备上发布连接到DataApi的代码吗?@TofferJ添加了侦听器服务代码。我实际上并没有连接到可穿戴设备上的DataApi,只是创建通知。谢谢!这帮了大忙。