Android Studio等待蓝牙启用

时间:2018-04-26 14:41:05

标签: java android bluetooth

我对编程很新,我正在尝试创建一个通过BluetoothLE与外围设备进行通信的应用程序。

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

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

我正在使用以下代码来处理此请求:

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

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

2 个答案:

答案 0 :(得分:0)

doc中所述,您必须检查蓝牙是否已启用,如果没有,请让用户激活它。这就是你的代码所做的事情。

您似乎缺少的是检查结果。当你打开的要求用户激活蓝牙的活动完成时,你必须检查用户是否启用了它。如果是,继续,如果没有做你想要的(如关闭应用程序或重新询问)。

要检查是否使用onActivityResult()。当激活蓝牙的活动完成时,此方法将被激活。检查您是否已使用请求代码(REQUEST_ENABLE_BT)从此活动返回,而不是从另一个活动返回。然后检查蓝牙是否已启用,如果是,请执行您的操作,如果没有关闭应用程序(例如)

所以你会有像

这样的东西
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()中执行。通过这样做,你将等待蓝牙被启用之前做你的东西。

答案 1 :(得分:0)

向Manifest添加以下权限

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

创建一个功能

public void setBluetoothEnable(Boolean enable) {
    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if(mBluetoothAdapter != null){
      if (enable) {
        if (!mBluetoothAdapter.isEnabled()) {
            mBluetoothAdapter.enable();
        }
      } else {
        if (mBluetoothAdapter.isEnabled()) {
            mBluetoothAdapter.disable();
        }
      }
    }
}

然后调用此函数

//For enable bluetooth
setBluetoothEnable(true);

//For disable bluetooth
setBluetoothEnable(false);

这对我有用