2015-07-09 67 views
0

我試圖在Play服務7.3中引入新的CapabilityApi以瞭解我的Android Wear設備(Asus Zenwatch)的功能。我已經檢出this question,並且可以確認Wearable.NodeApi.getConnectedNodes(...)方法確實可以獲取連接節點的列表,並且可以看到列表中的手錶。這是我在一個應用程序運行在手機上查詢連接磨損設備的功能代碼:在這種情況下Android Wear:CapabilityApi超時,不返回能力

GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(context) 
       .addApi(Wearable.API) 
       .build(); 

PendingResult<CapabilityApi.GetAllCapabilitiesResult> result = 
    Wearable.CapabilityApi.getAllCapabilities(mGoogleApiClient, CapabilityApi.FILTER_ALL); 

Map<String, CapabilityInfo> capabilities = result.await().getAllCapabilities(); 

方面是一種活動。這個調用發生在非ui線程上,所以調用await()是安全的。我在最後一行插入了一個斷點,但是當我點擊並跳過它時,調試器從不返回,就好像該方法永遠運行並且永不返回。如果我替換等待()等待(10000,TimeUnit.MILLISECONDS),那麼它在10秒後纔會超時並且功能被指定爲空。在配戴Android系統的手機上,或者不配對,或者在模擬器上,行爲是一樣的。

我錯過了什麼嗎?使用CapabilityApi的正確方法是什麼?獲取可用功能的列表並且沒有超時?

編輯1:

隨着@ianhanniballake的幫助下,我來到了這個代碼不掛,但返回的結果非常迅速:

ConnectionResult connectionResult = mGoogleApiClient.blockingConnect(CONNECTION_TIME_OUT_MS, TimeUnit.MILLISECONDS); 
if (connectionResult.isSuccess()) { 
    PendingResult<CapabilityApi.GetAllCapabilitiesResult> result = 
        Wearable.CapabilityApi.getAllCapabilities(mGoogleApiClient, CapabilityApi.FILTER_ALL); 
    mGoogleApiClient.disconnect(); 
    Map<String, CapabilityInfo> capabilities = 
        result.await().getAllCapabilities(); 
    return capabilities != null && !capabilities.isEmpty(); 
} else { 
    mGoogleApiClient.disconnect(); 
    return false; 
} 

然而,當我運行這個與Android智能手錶配對的手機上的代碼,功能最終爲空列表或空。這是預期的結果嗎?我以爲我應該得到我的智能手錶功能的清單。或者這個代碼應該在手錶上運行?

回答

1

您必須連接您的GoogleApiClient。考慮在後臺線程中使用blockingConnect(),然後檢查生成的ConnectionResult以確保連接成功。

+0

嘿,謝謝你的回答,它確實有效!但是我有一個後續問題,功能仍然是空的,或者是與Android Wear設備配對的手機上的空列表。我更新了這個問題。 –

+0

我認爲你誤解了Capa的功能Api:這些是你的應用定義的*功能,允許你區分節點。查看[發送消息培訓](http://developer.android.com/training/wearables/data-layer/messages.html)瞭解使用API​​的示例。 – ianhanniballake

+0

啊,我明白了,我懷疑我誤解了這個概念。謝謝! –