onDataChanged()
从未被调用。因为这个例子似乎对其他人有效,所以我将其作为一个单独的问题提出。我使用的是KitKat 4.4.2,如果有关系的话,请问在哪里查找解决方法,谢谢。onDataChanged()
从未被调用。因为这个例子似乎对其他人有效,所以我将其作为一个单独的问题提出。我使用的是KitKat 4.4.2,如果有关系的话,请问在哪里查找解决方法,谢谢。你可以检查两个方面:
packageName
必须与设备应用的packageName
完全相同onDataChanged()
仅在数据实际更改时才会调用。如果多次将相同的数据放入DataApi中,该方法仅调用一次,直到写入不同的数据为止。您可以向数据添加时间戳以确保该方法每次写操作时都会被调用。但是,使用DataApi在电池使用方面可能更昂贵,而发送消息则更经济实惠。因此,如果您只想在放置数据到DataApi后触发某个操作,则在完成后简单地发送一条消息即可。dataMap.getDataMap().putLong("Time",System.currentTimeMillis());
来确保更改。 - 13rac1在Play Services 8.3.0版本中,消息可能会延迟高达30分钟。通过新的setUrgent()方法,可以无延迟发送。
最后,如果您正在开发可穿戴设备,您将知道电池寿命和功耗优化对于拥有出色的用户体验至关重要。使用Google Play services 8.3,我们更新了DataApi,允许在数据项同步方式中添加紧急程度。现在,可以为数据项添加优先级以确定何时应该进行同步。例如,如果您正在构建需要立即同步的应用程序(如远程控制应用程序),则仍然可以通过调用setUrgent()立即完成,但对于更新联系人之类的事情,您可以容忍一些延迟。非紧急数据项可能会延迟高达30分钟,但您可以期望它们在大多数情况下会在几分钟内交付。低优先级现在是默认设置,因此需要setUrgent()来获取先前的时间安排。
http://android-developers.blogspot.nl/2015/11/whats-new-in-google-play-services-83.html
请确保build.gradle文件中的applicationId在手持设备和可穿戴模块中是相同的。
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "your.applicationid" // needs to be the same in both modules
minSdkVersion 20
targetSdkVersion 23
versionCode 1
versionName "1.0"
targetCompatibility = '1.7'
}
...
对我来说,罪魁祸首是服务声明中的这行代码:
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"
我不确定这行代码具体是怎样导致服务无法接收事件的,但当它被移除后,服务开始正常运作。
1. 检查 mobile 和 wear 的 build.gradle 文件,确保使用相同的 play 版本 compile 'com.google.android.gms:play-services-wearable:6.5.87'
我的 mobile 文件中有一个 + 号,这只会在 mobile 上使用最新版本
在两个文件中升级到相同的版本直到它正常工作
2. 愚蠢的解决方法,如果没有任何作用 (!! 如果您按照步骤一操作,则不需要此步骤)
....
Wearable.DataApi.putDataItem(mGoogleApiClient, request)
.......
this line after your put
Wearable.DataApi.deleteDataItems(mGoogleApiClient, request.getUri());
唤醒配对
发送数据
在两者上执行OnDataChange并使用良好的数据
删除数据(在两者上执行OnDataChange并使用无数据)(因此即使数据被删除也要准备好工作)
}
只有使用这个设置,onDataChanged 才能正常工作。