Проблемы с Bluetooth на HTC Hero
Я написал приложение для Android, получающее данные от внешних датчиков через Bluetooth. Он отлично работает на Sony Ericsson XPERIA, но не на HTC Hero (он находит внешние устройства, но не может получить от них никаких данных) Мне интересно, почему. После некоторых исследований в сети, я до сих пор не нашел никакой подсказки. У кого-нибудь были похожие проблемы с Bluetooth на HTC?
3 ответа
Вы можете сделать это так:
private final String PBAP_UUID = "0000112f-0000-1000-8000-00805f9b34fb"; //standard pbap uuid
mSocket = mDevice.createInsecureRfcommSocketToServiceRecord(ParcelUuid.fromString(PBAP_UUID).getUuid())
mSocket.connect();
Просто сделай это.
Если я правильно помню, телефоны HTC имели или [имеют] проблему на определенном уровне API (возможно, 2.1 и ниже?). Разрешение является отражением.
Ссылка
Отключите разъем Bluetooth в Android
Обнаружение службы не удалось исключение при использовании Bluetooth на Android
Решение
Вместо того, чтобы использовать
tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
использование
Method m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
tmp = (BluetoothSocket) m.invoke(device, 1);
чтобы получить BluetoothSocket на определенных телефонах HTC, используя определенный уровень API.
Решение расширено
Недавно у меня было приложение, в котором я должен был это учитывать, и мне не нравилось использовать его на телефонах, отличных от HTC, поэтому у меня было условие проверить HTC, если true, то использовать отражение, в противном случае - нет.
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;
}
Вы можете сделать это так:
private final String PBAP_UUID = "0000112f-0000-1000-8000-00805f9b34fb"; //standard pbap uuid
mSocket = mDevice.createInsecureRfcommSocketToServiceRecord(ParcelUuid.fromString(PBAP_UUID).getUuid());
mSocket.connect ();
Просто сделай это.