2016-06-29 21 views
0

我使用的是Nexus 5X手機,並試圖從谷歌API意識HeadphoneFence.unplugged()https://developers.google.com/android/reference/com/google/android/gms/awareness/fence/HeadphoneFenceHeadphoneFence.unplugged在谷歌API意識,無論觸發狀態

我發現,它激發我的懸而未決的意圖時,首先添加柵欄,然後無論我插入還是拔下耳機,它甚至會啓動,只會引發拔火。

我的代碼不是那麼令人感興趣,因爲它是從指南中直接出來的。

Awareness.FenceApi.updateFences(
           getGoogleApiClient(), 
           new FenceUpdateRequest.Builder() 
             .addFence(
               "something", 
               HeadphoneFence.unplugging();, 
               createSendHeadphoneUnpluggedMessagePendingIntent(context)) 
             .build()) 
           .setResultCallback(new ResultCallback<Status>() { 
            @Override 
            public void onResult(@NonNull Status status) { 
             if(status.isSuccess()) { 
              Log.i(TAG, "Headphone unplugged fence was successfully registered."); 
             } else { 
              Log.e(TAG, "Headphone unplugged fence could not be registered: " + status); 
             } 
            } 
           }); 
+0

您想要發佈完整的代碼嗎?我會嘗試複製它 – buddhabath

+0

忘記標記您的答覆^^ – buddhabath

+0

放入pastebin:http://pastebin.com/SYfuit10如果您需要更多信息,請告知我。 – Herman

回答

0

@Herman看起來確實如此。當應用程序啓動時(當登錄圍欄/接收器時)以及插拔它們時,它會爲您提供耳機的狀態。

它是有道理的我猜,如果耳機連接,你不拔掉他們,因此它會引發FenceState.FALSE,當你拔掉他們,它會引發FenceState.TRUE。不過,您可以選擇在

switch (fenceState.getCurrentState()) { 
       case FenceState.TRUE: 
        Log.i(TAG, "Fence > Headphones plugged out"); 
        break; 
       case FenceState.FALSE: 
        Log.i(TAG, "Fence > Headphones are NOT plugged out."); 
        break; 
       case FenceState.UNKNOWN: 
        Log.i(TAG, "Fence > The headphone fence is in an unknown state."); 
        break; 
      } 
+0

問題是,如果我想發出一個像「你剛剛拔下手機!」這樣的祝酒詞,那麼如果我沒有跟蹤之前查看過的內容,就無法做到這一點。它不符合圍欄的概念,發生事情時通知你。如果行爲應該是你所描述的,那麼另一個籬笆有什麼意義:HeadphoneFence.pluggingIn()? https://developers.google.com/android/reference/com/google/android/gms/awareness/fence/HeadphoneFence – Herman

+0

@Herman那麼FenceQuery方法提供了以前的狀態,所以如果有任何幫助,你可以使用,但我得到並同意你的觀點 – buddhabath

+0

我剛剛發現查詢FenceState沒有我想的那麼糟糕。 FenceState.TRUE並不意味着耳機被拔掉。這實際上意味着耳機拔出。 FenceState.FALSE意味着它不是拔掉。這就是爲什麼當圍欄被註冊時,無論耳機在該點插入還是拔出,圍欄狀態都是FenceState.FALSE。簡而言之,我只需要查詢狀態以確保它的FenceState.TRUE發送「拔出」消息。我不需要存儲以前的狀態等。 – Herman