在尝试检测我们的Android应用的用户是否将Wear设备与其手机配对时,我们致电
// Call Wear API to see whether a device is connected
... nodes = Wearable.NodeApi.getConnectedNodes(client).await(20, TimeUnit.SECONDS);
return nodes.getNodes().size() > 0;
我们刚刚注意到,在某些情况下,这会在返回空节点集合之前阻塞整整20秒,而不是像我们习惯的那样立即返回。 (如果我们取出超时并异步调用,它似乎永远不会解决。)
在进一步检查时,我们发现当用户甚至没有安装Wear应用程序时,似乎会发生这种情况。因此,我们在上面的行前面加上类似
的内容// Check if the Wear app is installed as we can't have a watch without it
try
{
getPackageManager()
.getPackageInfo("com.google.android.wearable.app", PackageManager.GET_META_DATA);
}
catch (PackageManager.NameNotFoundException ex)
{
return false;
}
这似乎足以满足我们的目的,但它似乎也很可怕:
是否有更合理的方法来检查Wear设备是否已连接而不必担心超时?