我已經寫了一個android應用程序,使用藍牙從外部傳感器獲取數據。它在索尼愛立信XPERIA上工作正常,但不是在HTC Hero(它發現外部設備,但它無法從它們獲取任何數據),我想知道爲什麼。在網絡上進行了一些研究之後,我還沒有發現任何線索。 任何人在HTC上都有類似的藍牙問題?HTC英雄藍牙問題
回答
如果我沒記錯的話,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;
}
非常感謝您的回答傑克, 不幸的是,我仍然無法打開套接字連接,代碼卡在該部分:tmp =(BluetoothSocket)m.invoke(device,1); 反射顯然不起作用,但我會將手機從2.1升級到最新版本。 如果有效,我會及時通知您。 – user1058169
也許'1'應該被稱爲Integet.valueOf(1)。你確定你想要RFComm端口1嗎? –
你可以把它像這樣:
private final String PBAP_UUID = "0000112f-0000-1000-8000-00805f9b34fb"; //standard pbap uuid
mSocket = mDevice.createInsecureRfcommSocketToServiceRecord(ParcelUuid.fromString(PBAP_UUID).getUuid());
mSocket.connect();
只要做到這一點。
你可以把它像這樣:
private final String PBAP_UUID = "0000112f-0000-1000-8000-00805f9b34fb"; //standard pbap uuid
mSocket = mDevice.createInsecureRfcommSocketToServiceRecord(ParcelUuid.fromString(PBAP_UUID).getUuid())
mSocket.connect();
只要做到這一點。
- 1. 藍牙Brecham.Obex32英尺
- 2. 藍牙的問題/問題HTC Desire的SPP配置文件會影響藍牙聊天應用程序嗎?
- 3. android.settings.INPUT_METHOD_SETTINGS不適用於HTC英雄
- 4. Android Froyo HTC Desire上的藍牙掃描
- 5. 如何斷開藍牙連接(HTC Desire)
- 6. Uart PIC16F690和藍牙問題
- 7. Android藍牙連接問題
- 8. 安卓藍牙問題
- 9. Android - 藍牙讀寫問題?
- 10. 藍牙服務問題
- 11. 藍牙連接問題
- 12. 新藍牙API問題
- 13. 藍牙Android的問題
- 14. GameKit藍牙傳輸問題
- 15. 核心藍牙的問題
- 16. Java - 藍牙API Bluecove問題
- 17. 配對藍牙設備與32英尺.NET藍牙庫
- 18. 從HTC Desire Z的輸入流中讀取Android藍牙時的問題
- 19. 英雄旋轉木馬問題
- 20. IntentService與藍牙連接問題
- 21. 藍牙打印機打印問題
- 22. 藍牙配對設備連接問題
- 23. 問題C#和32feet.NET藍牙庫
- 24. 藍牙設備連接問題
- 25. iOS藍牙低功耗問題
- 26. 藍牙設備數據傳輸問題
- 27. 藍牙發現設備類型問題
- 28. Android藍牙發送文件問題
- 29. Raspberry Pi3藍牙掃描問題
- 30. 問題與藍牙設備配對
你的英雄在運行什麼API級別? – Jack
感謝您的回覆。 這款HTC運行的是Android 2.1,因此它的API級別爲7. 我想我需要提升平臺。對? – user1058169