蓝牙忘记密码

时间:2013-03-12 13:35:39

标签: android bluetooth

所以我正在开发一个连接嵌入式蓝牙设备的应用程序。这个设备推出了不同的版本和我的测试设备,每个工作都很好。通过安全的rfcomm套接字进行通信。然而,另一组设备给了我毛骨悚然。他们有点失去了边界状态。虽然它们被标记为已配对,但每次我建立连接时,都会要求我重新输入PIN码。这真的不是理想的。此外,这种行为并非在所有设备上发生,而是大多数设备。实际上,唯一不会忘记PIN的设备是Galaxy Nexus S.三星Galaxy Nexus,ACE,GIO和X10 mini Pro倾向于“忘记”该设备之前配对。使用API​​ lvl 10,我已经尝试过不安全的RFCOMM连接,但没有成功。 我迷失在这里。有人有想法吗?

祝你好运!

1 个答案:

答案 0 :(得分:1)

您设备的getBTMajorDeviceClass是什么? 如果是BluetoothClass.Device.Major.UNCATEGORIZED,请尝试生成您自己的UUID:

private UUID generateUuid() {
String android_id = Secure.getString(getApplicationContext()
    .getContentResolver(), Secure.ANDROID_ID);
Log.i("System out", "android_id : " + android_id);

final TelephonyManager tm = (TelephonyManager) getBaseContext()
    .getSystemService(Context.TELEPHONY_SERVICE);

final String tmDevice, tmSerial, androidId;
tmDevice = "" + tm.getDeviceId();
Log.i("System out", "tmDevice : " + tmDevice);
tmSerial = "" + tm.getSimSerialNumber();
Log.i("System out", "tmSerial : " + tmSerial);
androidId = ""
    + android.provider.Settings.Secure.getString(
        getContentResolver(),
        android.provider.Settings.Secure.ANDROID_ID);

UUID deviceUuid = new UUID(androidId.hashCode(),
    ((long) tmDevice.hashCode() << 32) | tmSerial.hashCode());

return deviceUuid;
}

并在套接字创建createRfcommSocketToServiceRecord(generateUuid());

上使用它

*需要READ_PHONE_STATE