Здесь уже было 2 варианта. Оба они действительны в зависимости от вашего варианта использования. Я хотел бы добавить третий вариант, хотя и неполный.
Вариант 1: найти подключенные узлы с помощью NodeApi
Класс NodeApi имеет метод для получения подключенных узлов. При этом вы уверены, что у пользователя не было часов в прошлом или когда-то они были протестированы. У него действительно есть часы поблизости и он подключен.
Недостатком этого подхода является то, что вы не получите результатов, если bluetooth не включен или часы не подключены в данный момент.
Метод такой:
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 () не возвращает сопряженные устройства Bluetooth
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();
}
Обратите внимание, что для этого кода требуются разрешения Bluetooth в вашем манифесте.
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
person
hcpl
schedule
23.01.2015