java - Android Studio 等待蓝牙启用

标签 java android bluetooth

我对编程相当陌生,正在尝试创建一个通过蓝牙与外围设备进行通信的应用程序。

现在我能够做所有这些事情,但遇到了问题。如果在应用程序启动后激活手机蓝牙,当我开始扫描设备时,它就会崩溃。如果应用程序启动时蓝牙已激活,则不会出现此问题。

实际上,在应用程序启动时,我的程序正在检查手机上是否启用了蓝牙,如果没有,则要求用户启用它,但这会导致上述问题,因为它是在应用程序启动后启用的.

我使用以下代码来执行此请求:

 if (btAdapter != null && !btAdapter.isEnabled()) {
        Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
    }

我希望通过在这里暂停 oncreate() 方法直到蓝牙被激活来解决我的问题。但我该如何实现呢?

最佳答案

doc 中所述,您必须检查蓝牙是否启用,如果没有,请要求用户激活它。这就是您的代码的作用。

<小时/>

您似乎缺少的是检查结果。当您打开要求用户激活蓝牙的 Activity 完成后,您必须检查用户是否已启用蓝牙。如果是,请继续,如果不是,请执行您想要的操作(例如关闭应用程序或重新询问)。

要检查是否使用 onActivityResult() 。当激活蓝牙的 Activity 完成时,将触发该方法。使用请求代码 (REQUEST_ENABLE_BT) 检查您是否已从此 Activity 返回,而不是从其他 Activity 返回。然后检查蓝牙是否已启用,如果是,则执行您的操作,如果未关闭应用程序(例如)

所以你会得到类似的东西

void onCreate (Bundle savedInstanceState){
    if (btAdapter != null && !btAdapter.isEnabled()) {
        Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
    }
}

void onActivityResult (int requestCode, int resultCode, Intent data) {
    if(requestCode == REQUEST_ENABLE_BT) {
        if (btAdapter != null && btAdapter.isEnabled()) {
            startDoingThings();
        } else {
            finnish();
        }
    }
}

最后,检查蓝牙后在 onCreate() 中执行的其他操作。不要在 onCreate() 中执行此操作,而是在 startDoingThings() 中执行。通过这样做,您将等待蓝牙启用,然后再进行操作。

关于java - Android Studio 等待蓝牙启用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50045858/

相关文章:

java - 如何绘制android动画 donut chart

ios - 具有已知外设 UUID 的蓝牙设备(包括 Apple AirPods)的后台扫描

java - 有关不同编程语言中的 Hmac SHA256 的问题

java - 在 Java 中生成一个在 JVM 关闭后仍然存在的进程

java - 使用序列化为 json 的不同消息类型

android - 从 Android 应用程序以编程方式连接到蓝牙耳机

Python 非阻塞读取命令

java - 可以更改 .properties 文件中的 'absolute' 位置吗?

android - 使用 AnnotatedString 在文本之间添加小填充/边距

c# - TripleDES TransformFinalBlock 偶尔会给出 'Bad Data. ' 错误