我对编程很新,我正在尝试创建一个通过BluetoothLE与外围设备进行通信的应用程序。
现在我能够做所有这些事情,但遇到了问题。如果在应用程序启动后手机蓝牙被激活,它会在我开始扫描设备时立即崩溃。如果在应用程序启动时蓝牙已经激活,则不存在此类问题。
实际上在应用程序启动时,我的程序正在检查手机上是否启用了蓝牙,如果没有要求用户启用它,但它会导致上述问题,因为它在应用程序启动后启用
我正在使用以下代码来处理此请求:
if (btAdapter != null && !btAdapter.isEnabled()) {
Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
}
我希望通过暂停oncreate()方法来解决我的问题,直到蓝牙被激活。但是我该如何实现呢?
答案 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);
这对我有用