【问题标题】:Android studio: How to toggle a switch automatically?Android Studio:如何自动切换开关?
【发布时间】:2019-10-07 01:25:08
【问题描述】:

如何根据蓝牙状态使开关自动切换(也必须手动工作)?我需要什么方法?

我有一个简单的开关,用于手动打开和关闭蓝牙。它工作正常,但是如果从另一个应用程序或手机设置中打开/关闭蓝牙,当然开关不会改变。

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

【问题讨论】:

    标签: android switch-statement toggle


    【解决方案1】:

    你唯一的问题是你必须听蓝牙状态的变化。为此,您需要一个BroadcastReceiever 来监听蓝牙适配器的状态。您的其余代码都可以。

     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);
    }
    

    取自this answer,其中有非常详细的描述如何使用这种类型的BroadcastReceiver

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      • 2020-03-21
      相关资源
      最近更新 更多