2016-06-29 4 views
0

Я использую телефон Nexus 5X и опробовать Google Awareness API HeadphoneFence.unplugged() https://developers.google.com/android/reference/com/google/android/gms/awareness/fence/HeadphoneFenceHeadphoneFence.unplugged в Awareness API пожаров Google, независимо от состояния

я обнаружил, что он запускает свое ожидающее намерение, когда забор сначала добавлен, то независимо от того, я вставляю или отсоединяю наушники, он срабатывает, даже если он допускает только стрельбу для отсоединения.

Мой код - это не тот интерес, так как он прямо из руководства.

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

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