我编写了一个Android应用程序,使用蓝牙从外部传感器获取数据。它在索尼爱立信XPERIA上运行良好,但在HTC Hero上却没有(它找到了外部设备,但它无法从中获取任何数据)我想知道为什么。经过网上的一些研究,我仍然没有发现任何线索。 任何人在HTC上都有类似的蓝牙问题吗?
答案 0 :(得分:2)
如果我没记错的话,HTC手机在某个API级别(可能是2.1及以下?)有问题或者有问题。决议是反思。
<强>参考强>
Disconnect a bluetooth socket in Android
Service discovery failed exception using Bluetooth on Android
<强>解决方案强>
而不是使用
tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
使用
Method m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
tmp = (BluetoothSocket) m.invoke(device, 1);
使用某个API级别在某些HTC手机上获取BluetoothSocket。
解决方案扩展
我最近有一个应用程序,我必须考虑到这一点,我不喜欢在非HTC手机上使用它,所以我有条件检查HTC,如果是真的然后使用反射,否则不要。
public BTConnectThread(BluetoothDevice device) {
mmDevice = device;
BluetoothSocket tmp = null;
// Get a BluetoothSocket for a connection with the given BluetoothDevice
if (isAnHTCDevice())
{
try
{
Method m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
tmp = (BluetoothSocket) m.invoke(device, Integer.valueOf(1));
}
catch (Exception e)
{
Log.e(BCTAG, "Error at HTC/createRfcommSocket: " + e);
e.printStackTrace();
handler.sendMessage(handler.obtainMessage(MSG_BT_LOG_MESSAGE, "Exception creating htc socket: " + e));
}
}
else
{
try
{
UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
} catch (Exception e)
{
Log.e(BCTAG, "Error at createRfcommSocketToServiceRecord: " + e);
e.printStackTrace();
handler.sendMessage(handler.obtainMessage(MSG_BT_LOG_MESSAGE, "Exception creating socket: " + e));
}
}
mmSocket = tmp;
}
isAnHTCDevice():
public boolean isAnHTCDevice()
{
String manufacturer = android.os.Build.MANUFACTURER;
if (manufacturer.toLowerCase().contains("htc"))
return true;
else
return false;
}
答案 1 :(得分:1)
private final String PBAP_UUID = "0000112f-0000-1000-8000-00805f9b34fb"; //standard pbap uuid
mSocket = mDevice.createInsecureRfcommSocketToServiceRecord(ParcelUuid.fromString(PBAP_UUID).getUuid());
mSocket.connect();
做吧。
答案 2 :(得分:1)
private final String PBAP_UUID = "0000112f-0000-1000-8000-00805f9b34fb"; //standard pbap uuid
mSocket = mDevice.createInsecureRfcommSocketToServiceRecord(ParcelUuid.fromString(PBAP_UUID).getUuid())
mSocket.connect();
做吧。