禁用按钮,直到蓝牙连接
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;
}
}
};
我有一个 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;
}
}
};