【发布时间】:2016-02-02 23:01:42
【问题描述】:
我正在尝试使用新的 android wear comms API,特别是 Message API,我的手表应用程序中有一个 Activity 和一个服务,还有一个 Activity 作为手机中的测试应用程序。
我的通讯在两个方向上都可以正常工作,我可以通过从电话应用程序发送消息来通过通讯启动我的手表活动,这也可以正常工作,除了一个问题,它只在手表硬件重启后立即发生:
如果我在重启后立即通过通讯消息调用启动我的 Watch 应用,而没有先运行 Watch App Activity,那么从 Watch 返回的消息回复将丢失,并且手机应用看不到。
如果我在重启后和从电话应用启动通信之前在 Watch 应用中运行 Activity,那么即使我在发送任何消息之前关闭 Watch Activity,通信消息也可以正常工作。
Watch 端的 WearableListenerService 代码如下所示(非常简略)
public class MyClass extends WearableListenerService
implements MessageApi.MessageListener,
ConnectionCallbacks,
OnConnectionFailedListener
{
...
@Override
public void onCreate()
{
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Wearable.API)
.build();
}
@Override
public void onDestroy()
{
mGoogleApiClient.disconnect();
super.onDestroy();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
int result = super.onStartCommand(intent, flags, startId);
mGoogleApiClient.connect();
return result;
}
@Override
public void onMessageReceived(MessageEvent messageEvent)
{
comms.handleReceivedMessage (messageEvent);
}
public final void txReply(String txMessage, String nodeId)
{
Wearable.MessageApi.sendMessage(mGoogleApiClient,
nodeId,
MESSAGE_RECEIVED_PATH,
txMessage.getBytes());
}
@Override
public void onConnected(Bundle bundle)
{
Wearable.MessageApi.addListener(mGoogleApiClient, this);
}
@Override
public void onConnectionSuspended(int arg0)
{
// TODO Auto-generated method stub
}
@Override
public void onConnectionFailed(ConnectionResult arg0)
{
// TODO Auto-generated method stub
}
}
我的 comms.handleReceivedMessage() 函数直接调用了上面的 txReply() 函数,我已经使用 LogCat 验证了数据是正确的。
我非常感谢任何关于我可能遗漏的内容的指示,这会阻止电话应用程序接收到我的第一条 Watch App 消息。同样,如果在收到消息之前 Watch App Activity 尚未运行,则此行为仅在重启后立即发生。
--编辑-- @墨菲:
好吧,我查看了您的代码,它似乎与我已经拥有的几乎相同,实际上我有以下代码代替您的电话:
NodeApi.GetConnectedNodesResult nodes = Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await();
for (Node node : nodes.getNodes())
{
// Send message and wait for result
SendMessageResult result = Wearable.MessageApi.sendMessage(mGoogleApiClient,
node.getId(),
MESSAGE_RECEIVED_PATH,
txm.getBytes()).await();
}
因此,就手表丢失的通讯而言,差异并不显着,但无论如何感谢您的帮助。
问候,
【问题讨论】:
-
有人解决了这个问题吗?
标签: messaging wear-os android-wear-data-api