Как сохранить переключатель в положение «Выкл. / Ложь», когда в разрешениях отказано? - PullRequest
0 голосов
/ 23 марта 2020

Я создал переключатель, который включает / выключает Bluetooth телефона, но когда я отказываю в разрешениях для Bluetooth, он все еще переходит в состояние «включено», так как он был проверен. Я хочу убедиться, что он отключен при отказе в разрешении BT, поэтому я попытался использовать этот код:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_setup_bluetooth);

    bt_switch = findViewById(R.id.bt_switch);
    mBlueAdapter = BluetoothAdapter.getDefaultAdapter();


    if (mBlueAdapter.isEnabled()){
        bt_switch.setChecked(true);
    }

    bt_switch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        @RequiresApi(api = Build.VERSION_CODES.M)
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (!mBlueAdapter.isEnabled()) {
                Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                startActivityForResult(intent, REQUEST_ENABLE_BT);
                showToast("Requesting Bluetooth...");


        }
            if (mBlueAdapter.isEnabled()) {
                mBlueAdapter.disable();
                showToast("Bluetooth off");
            }
            }

    });

private void showToast(String msg) {
    Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case REQUEST_ENABLE_BT:
            if (resultCode == RESULT_OK) {
                showToast("Bluetooth is on");
                bt_switch.setChecked(true);
            } else {
                showToast("Bluetooth not activated");
                bt_switch.setChecked(false);
            }
            break;
    }
    super.onActivityResult(requestCode, resultCode, data);

}

, который работает до некоторой степени, но разрешения запрашиваются дважды - один раз при включении, а затем еще раз, когда вы отрицаете. Это нормально, если вы дважды «отказываете», но если вам нужно было включить, «запретить» первое приглашение, а затем «разрешить» второе приглашение, Bluetooth остается выключенным, но переключатель теперь переходит во включенное состояние и включается. / off функциональность обратная.

Я понимаю, что причина в том, что я меняю состояние переключателя каждый раз вместо того, чтобы иметь функциональность "если верно / если ложно", но я не уверен, как это исправить Это. Есть предложения?

...