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