我设法通过一个应用程序作为服务检查特定类型的设备的存在以及“设置”应用程序的修改版本,自动请求与键盘功能设备的配对过程。
我不得不说,我正在使用一个运行Android 4.0.3的自定义设备,没有外部控制(没有后退/主页/确认按钮):启动完成时配置控制器,没有任何交互,直到PIN请求是强制性的。
首先,我创建一个服务启动一个活动(android.intent.action.BOOT_COMPLETED和android.permission.RECEIVE_BOOT_COMPLETED),定期检查一个1344类设备的存在(键盘,是要求输入数据的唯一方式)on onReceive回调:
public void onReceive(Context context, Intent intent)
...
BluetoothDevice dev = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
...
if(dev.getBluetoothClass().getDeviceClass() == 1344){...}
一旦过滤,我选择可用的第一个键盘,然后我将BT地址传递给设置应用程序:
Intent btSettingsIntent = new Intent(Settings.ACTION_BLUETOOTH_SETTINGS);
btSettingsIntent.putExtra("btcontroller", dev.getAddress());
startActivityForResult(btSettingsIntent, 1);
棘手的部分是寻找最好的位置来称呼配对过程。只使用
intent.putExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT, PAIRING_VARIANT_PIN);
导致我进入一个对话框,一旦关闭,我将设备配对,但不可用。
挖掘到com.Android.settings.Bluetooth的类我发现我的方式通过
createDevicePreference(CachedBluetoothDevice cachedDevice)
在DeviceListPreferenceFragment中。
从那里我比较了我之前选择的BT地址和那些可用的地址,一旦成功匹配我打电话
cachedDevice.startPairing();
我知道,这很棘手,需要访问Android源代码,但在自定义环境中它可以工作。
我希望这可能是有帮助的。