Состояние наушников отображается неправильно с использованием Fence API

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

  1. Когда я иду, статус наушников подключен
  2. Когда я все еще статус наушников отключен

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

public class FenceApiDemo extends AppCompatActivity {

    private static final String DURING_FENCE_KEY = "DURING_FENCE_KEY";
    private static final String STARTING_FENCE_KEY = "STARTING_FENCE_KEY";
    private static final String STOPPING_FENCE_KEY = "STOPPING_FENCE_KEY";

    public static final int STATUS_DURING = 0;
    public static final int STATUS_STARTING = 1;
    public static final int STATUS_STOPPING = 2;
    public static final int STATUS_DEFAULT = 3;


    RelativeLayout mLayoutDetectedActivityFence;
    TextView mDetectedActivityText;

    private GoogleApiClient mGoogleApiClient;
    private PendingIntent mPendingIntent;
    private DetectedActivityFenceReceiver mDetectedActivityFenceReceiver;


    @Override
    protected void onCreate(Bundle savedInstanceState){

        super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_fence);

         mLayoutDetectedActivityFence =(RelativeLayout)findViewById (R.id.layout_detected_activity_fence);
         mDetectedActivityText=(TextView)findViewById (R.id.text_detected_activity) ;
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addApi(Awareness.API)
                .build();
        mGoogleApiClient.connect();

    mDetectedActivityFenceReceiver = new DetectedActivityFenceReceiver();
    Intent intent = new Intent(DetectedActivityFenceReceiver.FENCE_RECEIVER_ACTION);
    mPendingIntent = PendingIntent.getBroadcast(this, 1, intent, 0);
}

    @Override
    protected void onStart() {
        super.onStart();
        registerFences();
        registerReceiver(mDetectedActivityFenceReceiver, new IntentFilter(DetectedActivityFenceReceiver.FENCE_RECEIVER_ACTION));
    }

    @Override
    protected void onStop() {
        super.onStop();
        unregisterFences();
        unregisterReceiver(mDetectedActivityFenceReceiver);
    }


    private void registerFences() {
        AwarenessFence headphoneFence = DetectedActivityFence.during(DetectedActivity.WALKING);
        AwarenessFence startWalking = DetectedActivityFence.starting(DetectedActivity.WALKING);
        AwarenessFence stopWalkingFence = DetectedActivityFence.stopping(DetectedActivity.WALKING);

        Awareness.FenceApi.updateFences(
                mGoogleApiClient,
                new FenceUpdateRequest.Builder()
                        .addFence(DURING_FENCE_KEY, headphoneFence, mPendingIntent)
                        .addFence(STARTING_FENCE_KEY, startWalking, mPendingIntent)
                        .addFence(STOPPING_FENCE_KEY, stopWalkingFence, mPendingIntent)
                        .build())
                .setResultCallback(new ResultCallback<Status>() {
                    @Override
                    public void onResult(@NonNull Status status) {
                        if (status.isSuccess()) {

                            Snackbar.make(mLayoutDetectedActivityFence, "Fence Registered", Snackbar.LENGTH_LONG).show();
                        } else {
                            Snackbar.make(mLayoutDetectedActivityFence,
                                    "Fence Not Registered",
                                    Snackbar.LENGTH_LONG).show();
                        }
                    }
                });
    }

    private void unregisterFences() {
        Awareness.FenceApi.updateFences(
                mGoogleApiClient,
                new FenceUpdateRequest.Builder()
                        .removeFence(DURING_FENCE_KEY)
                        .removeFence(STARTING_FENCE_KEY)
                        .removeFence(STOPPING_FENCE_KEY)
                        .build()).setResultCallback(new ResultCallbacks<Status>() {
            @Override
            public void onSuccess(@NonNull Status status) {
                Snackbar.make(mLayoutDetectedActivityFence,
                        "Fence Removed",
                        Snackbar.LENGTH_LONG).show();
            }

            @Override
            public void onFailure(@NonNull Status status) {
                Snackbar.make(mLayoutDetectedActivityFence,
                        "Fence Not Removed",
                        Snackbar.LENGTH_LONG).show();
            }
        });
    }

    private void setHeadphoneState(int headphoneState) {
        switch (headphoneState) {
            case STATUS_DEFAULT:
                mDetectedActivityText.setText(R.string.text_still);

                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        mDetectedActivityText.setText(R.string.text_start_walking);
                        new Handler().postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                mDetectedActivityText.setText(R.string.text_walking);
                                new Handler().postDelayed(new Runnable() {
                                    @Override
                                    public void run() {
                                        mDetectedActivityText.setText(R.string.text_stopping_walking);
                                        new Handler().postDelayed(new Runnable() {
                                            @Override
                                            public void run() {
                                                mDetectedActivityText.setText(R.string.text_still);

                                            }
                                        }, 2500);
                                    }
                                }, 4000);
                            }
                        }, 2000);
                    }
                }, 5000);

                break;
            case STATUS_DURING:
                mDetectedActivityText.setText(R.string.text_walking);
                break;
            case STATUS_STARTING:
                mDetectedActivityText.setText(R.string.text_start_walking);
                break;
            case STATUS_STOPPING:
                mDetectedActivityText.setText(R.string.text_stopping_walking);
                break;
        }
    }

class DetectedActivityFenceReceiver extends BroadcastReceiver {

    public static final String FENCE_RECEIVER_ACTION =
            "FENCE_RECEIVER_ACTION";

    @Override
    public void onReceive(Context context, Intent intent) {
        FenceState fenceState = FenceState.extract(intent);

        if (TextUtils.equals(fenceState.getFenceKey(), DURING_FENCE_KEY)) {
            switch(fenceState.getCurrentState()) {
                case FenceState.TRUE:
                    setHeadphoneState(STATUS_DURING);
                    Toast.makeText(context,"1 headphone plugged in",Toast.LENGTH_SHORT).show();
                    break;
                case FenceState.FALSE:
                    setHeadphoneState(STATUS_DEFAULT);
                    Toast.makeText(context,"1 headphone unplugged in",Toast.LENGTH_SHORT).show();
                    break;
                case FenceState.UNKNOWN:
                    Snackbar.make(mLayoutDetectedActivityFence,
                            "Oops, your headphone status is unknown!",
                            Snackbar.LENGTH_LONG).show();
                    break;
            }
        } else if (TextUtils.equals(fenceState.getFenceKey(), STARTING_FENCE_KEY)) {
            switch(fenceState.getCurrentState()) {
                case FenceState.TRUE:
                    setHeadphoneState(STATUS_STARTING);
                    Toast.makeText(context,"2 headphone plugged in",Toast.LENGTH_SHORT).show();
                    break;
                case FenceState.FALSE:
                    Toast.makeText(context,"2 headphone unplugged in",Toast.LENGTH_SHORT).show();
                    break;
                case FenceState.UNKNOWN:
                    Snackbar.make(mLayoutDetectedActivityFence,
                            "Oops, your headphone status is unknown!",
                            Snackbar.LENGTH_LONG).show();
                    break;
            }
        } else if (TextUtils.equals(fenceState.getFenceKey(), STOPPING_FENCE_KEY)) {
            switch(fenceState.getCurrentState()) {
                case FenceState.TRUE:
                    setHeadphoneState(STATUS_STOPPING);
                    Toast.makeText(context,"3 headphone plugged in",Toast.LENGTH_SHORT).show();
                    break;
                case FenceState.FALSE:
                    Toast.makeText(context,"3 headphone unplugged in",Toast.LENGTH_SHORT).show();
                    break;
                case FenceState.UNKNOWN:
                    Snackbar.make(mLayoutDetectedActivityFence,
                            "Oops, your headphone status is unknown!",
                            Snackbar.LENGTH_LONG).show();
                    break;
            }
        }
    }


}

0 ответов

Другие вопросы по тегам