Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Studio等待蓝牙启用_Java_Android_Bluetooth - Fatal编程技术网

Java Android Studio等待蓝牙启用

Java Android Studio等待蓝牙启用,java,android,bluetooth,Java,Android,Bluetooth,我对编程相当陌生,正在尝试创建一个通过蓝牙与外围设备通信的应用程序 现在我能够做所有这些事情,但遇到了一个问题。如果手机蓝牙在应用程序启动后被激活,那么一旦我开始扫描设备,它就会崩溃。如果应用程序启动时蓝牙已激活,则不存在此类问题 实际上,在应用程序启动时,我的程序会检查手机上是否启用了蓝牙功能,如果没有,则会要求用户启用蓝牙功能,但这会导致上述问题,因为蓝牙功能是在应用程序启动后启用的 我正在为此请求使用以下代码: if (btAdapter != null && !btAd

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

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

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

我正在为此请求使用以下代码:

 if (btAdapter != null && !btAdapter.isEnabled()) {
        Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
    }
我希望通过暂停oncreate()方法来解决我的问题,直到蓝牙被激活。但是如何实现这一点呢?

如中所述,您必须检查蓝牙是否已启用,如果未启用,请用户将其激活。这就是你的代码所做的


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

检查该用途。激活蓝牙的活动完成后,将触发此方法。使用请求代码(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()中执行,而是在startDingThings()中执行。通过这样做,您将等待蓝牙功能启用后再进行操作

将以下权限添加到清单

<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);

这对我有用

谢谢!这似乎正是我要找的。不幸的是,它没有起作用。通过此修改,应用程序启动时不会询问用户是否要激活蓝牙。而是即时调用“startDingThings();”方法。它的行为非常奇怪。有些隐身装置没有设置好,我现在在你的帮助下开始工作了。谢谢!最后一个问题是,在检查蓝牙状态之前,我初始化了btScanner。。。。我把这个也放在了StartDingThings()中;方法,现在一切都完美无瑕,谢谢!