Android WearableListenerService必须被调用两次才能接收消息
我正在通过我的手持设备向服务发送一条信息。 我第一次单击手持设备上的按钮只是调用服务的onCreate方法,第二次服务也收到消息。我想不出这个问题 这是我的易损件:Android WearableListenerService必须被调用两次才能接收消息,android,service,message,watch,Android,Service,Message,Watch,我正在通过我的手持设备向服务发送一条信息。 我第一次单击手持设备上的按钮只是调用服务的onCreate方法,第二次服务也收到消息。我想不出这个问题 这是我的易损件: @Override public void onClick(View v) { final PendingResult<NodeApi.GetConnectedNodesResult> nodes1 = Wearable.NodeApi.getConnectedNodes(mApi
@Override
public void onClick(View v)
{
final PendingResult<NodeApi.GetConnectedNodesResult> nodes1 = Wearable.NodeApi.getConnectedNodes(mApiClient);
nodes1.setResultCallback(new ResultCallback<NodeApi.GetConnectedNodesResult>()
{
@Override
public void onResult(NodeApi.GetConnectedNodesResult result)
{
for (int i = 0; i < result.getNodes().size(); i++)
{
Node node = result.getNodes().get(i);
PendingResult<MessageApi.SendMessageResult> messageResult = Wearable.MessageApi.sendMessage(mApiClient, node.getId(), "/OPEN;"
+ cnt, null);
messageResult.setResultCallback(new ResultCallback<MessageApi.SendMessageResult>()
{
@Override
public void onResult(MessageApi.SendMessageResult sendMessageResult)
{
Status status = sendMessageResult.getStatus();
Log.d("", "##Status: " + status.toString());
if (status.getStatusCode() != WearableStatusCodes.SUCCESS)
{
//not getting there, always success
}
}
});
}
}
});
}
也许我还应该提到,当服务之前被破坏时,我只需要点击按钮两次,这发生在点击事件之后几秒钟。
所以..事实上是这样的:
磨损咔哒声
创建服务
磨损咔哒声
已接收消息上的服务
磨损咔哒声
已接收消息上的服务
//等几秒钟
服务预订
磨损咔哒声
创建服务
磨损咔哒声
已接收消息上的服务
希望这是清楚的:-)
提前谢谢 我想我可能已经解决了这个问题,Phillip Adam-尝试在调用超类的onMessageReceived()方法中注释服务中的行。这对我来说是正确的 我已经对此进行了更多的处理,如果您仍然遇到侦听器服务在第一次尝试时未启动的错误,我发现增加超时间隔会有所帮助。我将我的设置为10毫秒,但将其设置为更大的值似乎有所帮助
查看我为项目创建的中的代码。祝你好运!:) 您是否尝试过DataLayer SDK示例?listenerService部件不扩展ConnectionCallbacks、OnConnectionFailedListener接口。您的连接回调方法可能没有用处,因为您可以始终通过调用api客户端的isConnected()方法来检查连接。只有可穿戴部分扩展了这两个接口。另外,您的ondestory()方法会断开api客户机的连接,这可能就是您需要单击两次的原因。
public class DataLayerListenerService extends WearableListenerService implements ConnectionCallbacks, OnConnectionFailedListener
{
private GoogleApiClient mApiClient;
private SharedPreferences prefs;
@Override
public void onCreate()
{
Log.d("", "##DataService created");
super.onCreate();
if (null == mApiClient)
{
mApiClient = new GoogleApiClient.Builder(this).addApi(Wearable.API).addConnectionCallbacks(this).addOnConnectionFailedListener(this)
.build();
}
if (!mApiClient.isConnected())
{
mApiClient.connect();
Log.d("", "##Api connecting");
}
}
@Override
public void onDestroy()
{
Log.d("", "##DataService destroyed");
if (null != mApiClient)
{
if (mApiClient.isConnected())
{
mApiClient.disconnect();
}
}
super.onDestroy();
}
@Override
public void onMessageReceived(MessageEvent messageEvent)
{
Log.d("", "##DataService received " + messageEvent.getPath());
super.onMessageReceived(messageEvent);
if (messageEvent.getPath().contains("/OPEN;"))
{
// only if called twice :(
}
}
@Override
public void onDataChanged(DataEventBuffer dataEvents)
{
Log.d("", "##DataService Data changed");
}
@Override
public void onConnectionFailed(ConnectionResult arg0)
{
}
@Override
public void onConnected(Bundle arg0)
{
}
@Override
public void onConnectionSuspended(int arg0)
{
}
}