Студия Android: как автоматически переключать переключатель? - PullRequest
0 голосов
/ 06 октября 2019

Как сделать так, чтобы Switch автоматически переключался (он должен работать и вручную) в зависимости от состояния Bluetooth? Какой метод мне нужен?

У меня есть простой переключатель, который я использую для включения и выключения Bluetooth вручную. И работает нормально, однако, если Bluetooth включен из другого приложения или в настройках телефона, переключатель, конечно, не изменится.

BluetoothAdapter mBluetAdapter = BluetoothAdapter.getDefaultAdapter();
Switch mySwitch = findViewById(R.id.blueSwc);
mySwitch.setChecked(mBluetAdapter.isEnabled()); //this only works at the beginning

1 Ответ

1 голос
/ 06 октября 2019

Ваша единственная проблема в том, что вам нужно прослушивать изменения состояния Bluetooth. Для этого вам понадобится BroadcastReceiever, который прослушивает состояние адаптера Bluetooth. Остальная часть вашего кода относительно этого в порядке.

 private final BroadcastReceiver mBroadcastReceiver1 = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();

        if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
            final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
            switch(state) {
                case BluetoothAdapter.STATE_OFF:
                    mySwitch.setChecked(false);
                    break;
                case BluetoothAdapter.STATE_TURNING_OFF:

                    break;
                case BluetoothAdapter.STATE_ON:
                    mySwitch.setChecked(true);
                    break;
                case BluetoothAdapter.STATE_TURNING_ON:

                    break;
            }

        }
    }
};

Зарегистрируйте это так

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    IntentFilter filter1 = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
    registerReceiver(mBroadcastReceiver1, filter1);

    ...
}

И отмените регистрацию как

@Override
protected void onDestroy() {
    super.onDestroy();

    unregisterReceiver(mBroadcastReceiver1);
}

Взято с этот ответ , который имеет очень подробное описание того, как использовать BroadcastReceiver такого типа.

Надеюсь, это поможет.

...