这里已经列出了 2 个选项。它们都有效,具体取决于您的用例。我想添加第三个选项,但不完整。
选项 1:使用 NodeApi 查找连接的节点
NodeApi 类有一个检索连接节点的方法。有了这个,您就可以确定用户过去不只是拥有一只手表或曾经测试过一只手表。他真的在附近有一块手表并且已经连接了。
这种方法的缺点是,如果没有启用蓝牙或此时手表未连接,您将无法获得任何结果。
方法是:
List<Node> connectedNodes =
Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await().getNodes();
更完整的代码示例如下所示:
private GoogleApiClient client;
private static final long CONNECTION_TIME_OUT_MS = 1000;
public void checkIfWearableConnected() {
retrieveDeviceNode(new Callback() {
@Override
public void success(String nodeId) {
Toast.makeText(this, "There was at least one wearable found", Toast.LENGTH_SHORT).show();
}
@Override
public void failed(String message) {
Toast.makeText(this, "There are no wearables found", Toast.LENGTH_SHORT).show();
}
});
}
private GoogleApiClient getGoogleApiClient(Context context) {
if (client == null)
client = new GoogleApiClient.Builder(context)
.addApi(Wearable.API)
.build();
return client;
}
private interface Callback {
public void success(final String nodeId);
public void failed(final String message);
}
private void retrieveDeviceNode(final Callback callback) {
final GoogleApiClient client = getGoogleApiClient(this);
new Thread(new Runnable() {
@Override
public void run() {
client.blockingConnect(CONNECTION_TIME_OUT_MS, TimeUnit.MILLISECONDS);
NodeApi.GetConnectedNodesResult result =
Wearable.NodeApi.getConnectedNodes(client).await();
List<Node> nodes = result.getNodes();
if (nodes.size() > 0) {
String nodeId = nodes.get(0).getId();
callback.success(nodeId);
} else {
callback.failed("no wearables found");
}
client.disconnect();
}
}).start();
}
选项 2:检查 Android Wear 应用
这就是第二种选择的优势。如果您拿到手表,首先要连接它,就是在您的掌上电脑上安装 Android Wear 应用程序。因此,您可以使用PackageManager 来验证是否安装了此 Android Wear 应用程序。
这里的缺点是您可以在没有手表的情况下安装 Wear 应用。
代码示例:
try {
getPackageManager().getPackageInfo("com.google.android.wearable.app", PackageManager.GET_META_DATA);
Toast.makeText(this, "The Android Wear App is installed", Toast.LENGTH_SHORT).show();
} catch (PackageManager.NameNotFoundException e) {
//android wear app is not installed
Toast.makeText(this, "The Android Wear App is NOT installed", Toast.LENGTH_SHORT).show();
}
选项 3:检查配对设备
不确定这是否可行,但在某些情况下,这将是完美的解决方案,因为您可以检查用户的手表是否与他的设备配对,而当时无需连接。
下面是一个代码示例,但这不包括检查配对设备是否为可穿戴设备。这只是一个起点。
代码示例来自:getbondeddevices() not returning paired bluetooth devices
BluetoothAdapter mBtAdapter = BluetoothAdapter.getDefaultAdapter();
Set<BluetoothDevice> pairedDevices = mBtAdapter.getBondedDevices();
if (pairedDevices.size() > 0) {
Toast.makeText(this, "At least one paired bluetooth device found", Toast.LENGTH_SHORT).show();
// TODO at this point you'd have to iterate these devices and check if any of them is a wearable (HOW?)
for (BluetoothDevice device : pairedDevices) {
Log.d("YOUR_TAG", "Paired device: "+ device.getName() + ", with address: " + device.getAddress());
}
} else {
Toast.makeText(this, "No paired bluetooth devices found", Toast.LENGTH_SHORT).show();
}
请注意,此代码需要清单中的蓝牙权限。
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>