如何在安卓系统中显示蓝牙设备选择器?

4
我喜欢启用蓝牙时弹出的快速选择对话框,但它并不总是显示。我想通过编程来显示此对话框。

enter image description here

我能找到的最接近的是:

Intent bluetoothPicker = new Intent("android.bluetooth.devicepicker.action.LAUNCH");
        bluetoothPicker.putExtra("android.bluetooth.devicepicker.extra.FILTER_TYPE", 1);
        bluetoothPicker.putExtra("android.bluetooth.devicepicker.extra.NEED_AUTH", false);
        bluetoothPicker.putExtra("android.bluetooth.devicepicker.extra.LAUNCH_PACKAGE", "com.cake.x0a.WoBo");

然而,正如您所看到的,还存在一些细微差别。但最大的问题是,在选择设备时,对话框关闭而不尝试连接到设备。出现错误:
E/WindowManager: android.view.WindowLeaked: Activity com.android.settings.bluetooth.BluetoothScanDialog 泄漏了窗口 com.android.internal.policy.impl.PhoneWindow$DecorView{428851c0 V.E..... R......D 0,0-640,855},它最初是在此处添加的 at android.view.ViewRootImpl.(ViewRootImpl.java:467) at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:267) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) at android.app.Dialog.show(Dialog.java:289) at com.android.settings.bluetooth.BluetoothScanDialog.initialize(BluetoothScanDialog.java:86) at com.android.settings.bluetooth.BluetoothScanDialog.onPostCreate(BluetoothScanDialog.java:103) at android.app.Instrumentation.callActivityOnPostCreate(Instrumentation.java:1156) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2396) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471) at android.app.ActivityThread.access$900(ActivityThread.java:175) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:146) at android.app.ActivityThread.main(ActivityThread.java:5602) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) at dalvik.system.NativeStart.main(Native Method)

enter image description here

好消息是,它仍然在关闭之前发送DEVICE_SELECTED意图,因此我仍然可以通过编程连接它。但这真的很不干净。我想使用来自本机Android的自包含LocalBluetoothMonitor,它可以自行扫描、连接、配对,而无需更改活动。

你是否已经添加了蓝牙权限,更具体地说,是“BLUETOOTH_ADMIN”? - James
1个回答

1
似乎BluetoothScanDialog无法连接设备,只能显示附近的设备。这不是您代码的错误。
好消息是如果您有DEVICE_SELECTED,完成工作的代码不多。您应该能够使用以下内容:
private Boolean connect(BluetoothDevice bdDevice) { 
    Boolean bool = false;
    try {
        Class cl = Class.forName("android.bluetooth.BluetoothDevice");
        Class[] par = {};
        Method method = cl.getMethod("createBond", par);
        Object[] args = {};
        bool = (Boolean) method.invoke(bdDevice);//, args);// this invoke creates the detected devices paired.
    } catch (Exception e) {
        e.printStackTrace();
    }
    return bool.booleanValue();
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接