对于我的应用程序,我试图以编程方式配对蓝牙设备。我能够显示我想对的设备的配对对话框,并且我可以输入一个弹码。当我按下“对”时,对话框就会被删除,什么也不会发生。
我只需要支持带有Android2.0和更新版本的设备。
目前,我正在使用以下代码启动配对过程:
public void pairDevice(BluetoothDevice device) {
String ACTION_PAIRING_REQUEST = "android.bluetooth.device.action.PAIRING_REQUEST";
Intent intent = new Intent(ACTION_PAIRING_REQUEST);
String EXTRA_DEVICE = "android.bluetooth.device.extra.DEVICE";
intent.putExtra(EXTRA_DEVICE, device);
String EXTRA_PAIRING_VARIANT = "android.bluetooth.device.extra.PAIRING_VARIANT";
int PAIRING_VARIANT_PIN = 0;
intent.putExtra(EXTRA_PAIRING_VARIANT, PAIRING_VARIANT_PIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}在启动配对请求之前,我停止扫描新设备。
我的应用程序具有以下蓝牙权限:
发布于 2012-10-08 14:46:28
我设法通过一个应用程序自动请求一个与键盘功能齐全的设备配对的过程,作为一个服务,检查特定类型设备的存在以及Settings应用程序的修改版本。
我不得不说,我在一个运行Android4.0.3的定制设备上工作,没有外部控件(没有back/Home/确认按钮):在启动完成时对控制器进行配对,不需要任何交互,直到PIN请求是强制性的。
首先,我创建了一个服务,在启动时启动一个活动(使用android.intent.action.BOOT_COMPLETED和android.permission.RECEIVE_BOOT_COMPLETED)定期检查onReceive回调中是否存在一个1344类设备(键盘是根据请求输入数据的唯一方法):
public void onReceive(Context context, Intent intent)
...
BluetoothDevice dev = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
...
if(dev.getBluetoothClass().getDeviceClass() == 1344){...}过滤后,我选择第一个可用键盘,然后将BT地址传递给Settings应用程序:
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);带我到了一个曾经关闭的paring对话框,使我与设备成对,但无法使用。
深入研究com.Android.settings.Bluetooth的类,我找到了通过
createDevicePreference(CachedBluetoothDevice cachedDevice) 在DeviceListPreferenceFragment里。
在那里,我确实比较了我以前选择的BT地址和即将出现的可用地址,一旦成功匹配,我就打电话了。
cachedDevice.startPairing();我知道,这很棘手,需要访问Android源代码,但在自定义环境中,它可以工作。
我希望这能帮上忙。
发布于 2016-04-04 09:37:40
我的回答是:
在onCreate()中编写如下:
registerReceiver(incomingPairRequestReceiver, new IntentFilter(BluetoothDevice.ACTION_PAIRING_REQUEST));然后创建变量
private final BroadcastReceiver incomingPairRequestReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_PAIRING_REQUEST.equals(action)) {
BluetoothDevice dev = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
//pair from device: dev.getName()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
dev.setPairingConfirmation(true);
//successfull pairing
} else {
//impossible to automatically perform pairing,
//your Android version is below KITKAT
}
}
}
};发布于 2012-01-14 01:09:31
不幸的是,我认为最好的方法是为用户打开设置/无线和网络/蓝牙设置,如下所示:
Intent intent = new Intent(Settings.ACTION_BLUETOOTH_SETTINGS);
startActivityForResult(intent, REQUEST_PAIR_DEVICE);https://stackoverflow.com/questions/4989902
复制相似问题