【发布时间】:2018-08-04 08:00:46
【问题描述】:
我喜欢启用蓝牙时弹出的快速选择对话框。但它并不总是显示。我想以编程方式显示此对话框。
我能得到的最接近的是:
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: 活动 com.android.settings.bluetooth.BluetoothScanDialog 已泄露窗口 com.android.internal.policy.impl.PhoneWindow$DecorView{428851c0 V.E..... R......D 0,0-640,855} 最初添加在这里 在 android.view.ViewRootImpl.(ViewRootImpl.java:467) 在 android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:267) 在 android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) 在 android.app.Dialog.show(Dialog.java:289) 在 com.android.settings.bluetooth.BluetoothScanDialog.initialize(BluetoothScanDialog.java:86) 在 com.android.settings.bluetooth.BluetoothScanDialog.onPostCreate(BluetoothScanDialog.java:103) 在 android.app.Instrumentation.callActivityOnPostCreate(Instrumentation.java:1156) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2396) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471) 在 android.app.ActivityThread.access$900(ActivityThread.java:175) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:146) 在 android.app.ActivityThread.main(ActivityThread.java:5602) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 在 dalvik.system.NativeStart.main(Native Method)
好消息是,它仍然会在关闭之前发送 DEVICE_SELECTED 意图,因此我仍然可以通过编程方式连接到它。但是真的很脏。我想使用原生 android 自带的 LocalBluetoothMonitor,它可以在不改变活动的情况下自行扫描、连接、配对。
【问题讨论】:
-
您是否添加了蓝牙权限,更具体地说,
BLUETOOTH_ADMIN