禁用按钮,直到蓝牙连接

Disable button until bluetooth connected

我有一个 android 应用程序可以自动打开设备蓝牙并连接到配对设备。设备发送不断更新的数据。如果用户按下用于初始化设备并开始操作的启用设备按钮,则在建立连接之前,所有先前的数据都会被重置。

这是一个 Android 项目,我是从一家外包公司那里得到的,所以我最初并没有写代码。我有

private void initialize() {
        // initializing and launching the Equipment layer api
        try {
            Utility.writeLogs(this, getString(R.string.info), TAG, 
"Initializing EState Manager");
           EStateManager.getInstance().launch(getResources());
           getInfo();
           requestConfiguration();
           findViewById(R.id.btn_enable).setVisibility(View.VISIBLE);
           handleConnectionDialog();
       } catch (Exception e) {
            e.printStackTrace();
            Utility.writeLogs(this, getString(R.string.error), TAG, 
"EStateManger initialization failed");
            Utility.writeLogs(this, getString(R.string.error), TAG, e);
       }
    }


private void handleConnectionDialog() {

    ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
        exec.scheduleAtFixedRate(() -> {
            // do stuff
            if (!EStateManager.getInstance().isDataReceived()) {
                if (!new PrefUtil(this).isConnectionDialogEnabled()) {
                    runOnUiThread(() -> 
onShowPopup(Utility.POPUP_MAP.get(14)));
                }
            } else {
                if (!buttonPressed) {

findViewById(R.id.btn_enable).setVisibility(View.VISIBLE);
                }
                EStateManager.getInstance().setDataReceived(false);
            }
        }, 5, 5, TimeUnit.SECONDS);
    }

我想在蓝牙连接成功之前禁用按钮,以确保保存的参数不会被更改。

配置广播接收器以侦听 ACTION_STATE_CHANGED

然后检查额外的 EXTRA_CONNECTION_STATE 并启用按钮,如果它是 STATE_CONNECTED

同样在 ACTION_STATE_CHANGED 接收器中,检查 STATE_DISCONNECTED 并禁用按钮。

回复评论:

如果在 MainActivity.java 中像这样定义

,则接收器中应允许使用 findViewById

public class HomeActivity extends Activity {

...

    private final BroadcastReceiver mRadioReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                button = (Button) findViewById(R.id.button1);
                String action = intent.getAction();
                switch (action) {
                    case ACTION__DEVICE_CONNECTED:
                        button.setEnabled(true);
                        break;
                    case ACTION_DEVICE_DISCONNECTED:
                        button.setEnabled(false);
                        break;
                }
            }
        };