这里已经列出了两个选项。取决于您的用例,它们都是有效的。但我想添加第三个选项,但是它不完整。
选项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) {
Toast.makeText(this, "The Android Wear App is NOT installed", Toast.LENGTH_SHORT).show();
}
选项三:检查配对设备
不确定是否可行,但在某些情况下,这将是完美的解决方案,因为您可以检查用户是否将手表与其设备配对,而此时它不必连接。
以下是一个代码示例,但这并不包括检查配对设备是否为可穿戴设备。这只是一个起点。
代码示例来自: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();
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"/>