2014-11-10 2 views
4

Я разрабатываю приложение для Android, которое также использует уведомления на устройстве Android Wear. Для моей функциональности приложений важно знать, подключено ли устройство Wear или нет, и определить его невозможно.Определите, работает ли устройство Android Wear

Я попытался следующие:

  • Использование API Nodelistener. Я хочу сделать что-то простое - например, перезапустить часы и посмотреть, что он отключен и онлайн, но я не получаю эти события. Я читал, что это просто hardcore спаривания/разблокировки часов, которые заставляют эти события отправлять (что кажется неправильным imo, и это слишком сложно, чтобы проиллюстрировать цель моего приложения). Я также прочитал этот пост (https://plus.google.com/+NathanSchwermann/posts/1Rs9etY5qte), но я уже использую WLS в своем приложении.
  • Вместо этого используется прослушиватель bluetooth (Broadcastreceiver прослушивает действия BluetoothDevice.ACTION_ACL_CONNECTED и DISCONNECTED), который отлично работает, за исключением того, что я не могу определить, подключено ли это устройство Wear. Опять же, это из-за NodeApi: Wearable.NodeApi.getConnectedNodes (wearApiClient) .setResultCallback ... никогда не получает обратного вызова результата. Это то, что я пытаюсь сделать, когда получаю ACION_ACL_CONENCTED действие кстати, - и тогда я просто хочу посмотреть, сколько узлов подключено, и определить, является ли это вновь подключенным узлом.

Так что все это не работает, и у меня нет идей. Кажется, что NodeApi не работает, как разработчик хочет его использовать, и мне действительно нужна эта функциональность.

Кто-нибудь знает умный способ обойти это?

** UPDATE: **

Просто чтобы прояснить, я хочу, чтобы получить обратный вызов, когда устройства подключать и отключать.

+0

Привет, пожалуйста, вы нашли метод, управляемый событиями? Я спрашиваю здесь http://stackoverflow.com/questions/31312265/android-wearables-how-to-handle-the-event-of-a-connected-device – user3290180

ответ

1

Вы можете проверить количество узлов, подключенных к устройству с
List<Node> connectedNodes = Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await().getNodes();
Но будьте осторожны, Google Glass рассчитывает как узел, так что если у вас есть SmartWatch и Google Glass, подключенный к КПК, вы будете иметь 2 узла, а не один.

+0

Это должно совпадать с моим звонком Wearable.NodeApi.getConnectedNodes (wearApiClient) .setResultCallback ... – Joakim

0

Я использую гораздо более простой метод, который подходит для моего случая использования, проверьте, установлен ли андроид приложение износа:

try { 
     getPackageManager().getPackageInfo("com.google.android.wearable.app", PackageManager.GET_META_DATA); 
    } catch (PackageManager.NameNotFoundException e) { 
     //android wear app is not installed 
    } 
1

Как писал в ответ Сноу, правильный метод:

List<Node> connectedNodes = Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await().getNodes(); 

или, если вы не можете назвать ОЖИДАНИЕ() (например, если вы находитесь на главном потоке UI):

Wearable.NodeApi.getConnectedNodes(wearApiClient).setResultCallback(new ResultCallback<NodeApi.GetConnectedNodesResult>() { 
    @Override 
    public void onResult(NodeApi.GetConnectedNodesResult getConnectedNodesResult) { 
     List<Node> nodes = getConnectedNodesResult.getNodes(); 
     // Do your stuff with connected nodes here 
    } 
}); 

Дело в том, что ResultCallback предоставит вам текущие подключенные носимые устройства, поэтому он будет вызываться только один раз (если вы еще не вызвали getConnectedNodes()), а не каждый раз, когда устройство подключается или отключается.

Смежные вопросы