我通过Android设置菜单正常配对设备,然后尝试以编程方式将其连接到打印机。我搜索配对的设备,尝试连接,然后它再次提示我我的针。我试图避免每次连接时都输入密码。
以下是相关代码:
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
String defaultPrinter = UserSession.getDefaultPrinter( context );
BluetoothDevice preferredDevice = null;
if ( defaultPrinter == null ) {
//start activity regarding selecting a default printer
}
else {
for (BluetoothDevice device : pairedDevices)
if ( device.getAddress().equals( defaultPrinter ) ) {
preferredDevice = device;
break;
}
}
UUID id = UUID.fromString( BLUE_TOOTH_UUID );
try {
selectedDeviceSocket = preferredDevice.createRfcommSocketToServiceRecord( id );
selectedDeviceSocket.connect();
isConnected = true;
return selectedDeviceSocket.getOutputStream();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
只有在我重新输入正确的引脚时才会发生连接。
答案 0 :(得分:1)
尝试生成自己的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;
}
并在此处使用:
selectedDeviceSocket = preferredDevice.createRfcommSocketToServiceRecord( generateUuid() );
*需要READ_PHONE_STATE权限