作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从可穿戴设备向手持设备发送消息,然后从手持设备向可穿戴设备发送响应(两个模块使用相同的代码和逻辑)。
Gradle :
compile 'com.google.android.support:wearable:2.0.0-alpha2'
compile 'com.google.android.gms:play-services-wearable:9.6.1'
...
classpath 'com.android.tools.build:gradle:2.2.1'
classpath 'com.google.gms:google-services:3.0.0'
AndroidManifest:
<application>
...
<service android:name=".ReceiverService"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.google.android.gms.wearable.MESSAGE_RECEIVED"/>
<data android:scheme="wear" android:host="*"/>
</intent-filter>
</service>
</application>
ReceiverService:
public class ReceiverService extends WearableListenerService {
@Override
public void onMessageReceived(MessageEvent messageEvent) {
super.onMessageReceived(messageEvent);
Log.v(TAG, "onMessageReceived: " + messageEvent);
}
}
消息发送者:
public class MessageSender implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
private static final String TAG = "_wear_message_sender";
private final GoogleApiClient mGoogleApiClient;
private static class InstanceHolder {
private static final MessageSender sInstance = new MessageSender();
}
private MessageSender() {
mGoogleApiClient = new GoogleApiClient.Builder(WearApp.getInstance().getContext())
.addApi(Wearable.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
}
public static MessageSender getInstance() {
return InstanceHolder.sInstance;
}
public void sendMessage(final String path, final String message) {
new Thread(new Runnable() {
@Override
public void run() {
if (!mGoogleApiClient.isConnected()) {
mGoogleApiClient.blockingConnect(Constants.GOOGLE_API_CLIENT_TIMEOUT_S, TimeUnit.SECONDS);
}
List<Node> nodes = Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await().getNodes();
Log.d(TAG, "Nodes count " + nodes.size());
for (Node node : nodes) {
Wearable.MessageApi.sendMessage(mGoogleApiClient, node.getId(), path, message.getBytes()).setResultCallback(new ResultCallback<MessageApi.SendMessageResult>() {
@Override
public void onResult(MessageApi.SendMessageResult sendMessageResult) {
Log.d(TAG, "sendMessage(" + path + "): " + sendMessageResult.getStatus().isSuccess());
}
});
}
mGoogleApiClient.disconnect();
}
}).start();
}
...
}
我得到了这个输出:
D/_wear_message_sender: onConnected: null
D/_wear_message_sender: Nodes count 1
D/_wear_message_sender: sendMessage(/test): true
我使用了 Moto 360 和模拟器,消息已发送但手持设备 WearableListenerService
onMessageReceived()
未被调用。反之亦然,我从手机发送了一条消息,但未调用可穿戴设备 onMessageReceived
。
我在这里错过了什么?
最佳答案
检查 applicationID
在移动应用程序和可穿戴应用程序的 build.gradle 中是相同的,因为否则 Android 将不知道应该将消息发送到哪个。你可以查看这个SO thread .还要确保 buildTypes
部分和 signingConfigs
部分在两个应用程序中相同。
关于Android手持设备和可穿戴设备收不到消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39980394/
我是一名优秀的程序员,十分优秀!