安卓蓝牙启用

标签 android

我正在开发蓝牙聊天应用程序。问题是,当我启用蓝牙时,应用程序启用蓝牙但导致强制关闭。下次我启动相同的应用程序(启用蓝牙)时,它运行顺利!我已经搜索过,只得到一些信息说当我开始启用蓝牙的 Intent 时,代码继续进行而不是等待 Intent 的结果

        public void run() {

        // 1. Check if Bluetooth is Enabled
        if (!blue.isEnabled()) {
            Intent enable_Bluetooth = new Intent(
                    BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enable_Bluetooth, 1);

        }

        // 2. Start Bluetooth Server
        try {
            Server = blue.listenUsingRfcommWithServiceRecord("dhiraj",
                    MY_UUID);

最佳答案

首先:

在您的应用程序 list 文件中声明蓝牙权限。 例如:

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

设置蓝牙:

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter == null) {
// Device does not support Bluetooth
}

启用蓝牙:

if (!mBluetoothAdapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}

查找设备:

Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
// If there are paired devices
if (pairedDevices.size() > 0) {
// Loop through paired devices
for (BluetoothDevice device : pairedDevices) {
    // Add the name and address to an array adapter to show in a ListView
    mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
}
}

发现设备:

// Create a BroadcastReceiver for ACTION_FOUND
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    // When discovery finds a device
    if (BluetoothDevice.ACTION_FOUND.equals(action)) {
        // Get the BluetoothDevice object from the Intent
        BluetoothDevice device =     
intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
        // Add the name and address to an array adapter to show in a ListView
        mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
    }
}
};
// Register the BroadcastReceiver
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy

启用发现

Intent discoverableIntent = new
Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
startActivity(discoverableIntent);

关于安卓蓝牙启用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9424756/

相关文章:

java - 错误 "E/MediaPlayer: Should have subtitle controller already set"导致没有音频播放

java - 从Unity脚本调用Android NDK函数

android - 将 Android 库导出为 JAR,并保留 RED 文件夹

java - ListView OnItemLongClickListener() 未触发

Android - 让 ImageView 适合 ListView

java - Android 如何让从 firebase 数据库加载数据与 orderByChild() & startAt() & limitToFirst() 结合?

android - 为什么Android软键盘出现时会出现?

java - Android 默认按钮点击效果不显示

java - 访问 .jar API 函数 - 错误 : Cannot make a static reference to the non-static method

android - 使用 RxJava 缓存网络调用一段时间