3

Bluetooth を使用して外部センサーからデータを取得する Android アプリケーションを作成しました。Sony Ericsson XPERIA では問題なく動作しますが、HTC Hero では動作しません (外部デバイスは検出されますが、そこからデータを取得できません)。ネットでいくらか調べても、まだ手がかりが見つかりません。HTC で同様の Bluetooth の問題が発生した人はいますか?

4

3 に答える 3

2

あなたはこのようにすることができます:

private final String PBAP_UUID = "0000112f-0000-1000-8000-00805f9b34fb"; //standard pbap uuid            
mSocket = mDevice.createInsecureRfcommSocketToServiceRecord(ParcelUuid.fromString(PBAP_UUID).getUuid())    
mSocket.connect();

早くやれよ。

于 2012-09-29T03:16:13.820 に答える
2

私の記憶が正しければ、HTC フォンには特定の API レベル (おそらく 2.1 以下?) で問題があったか、[ありました]。解像度は反射です。

参照

Android で Bluetooth ソケットを切断する

Android で Bluetooth を使用したサービス検出失敗例外

解決

使用する代わりに

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をチェックする条件がありました.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;
}
于 2011-11-25T18:47:21.947 に答える
1

あなたはこのようにすることができます:

private final String PBAP_UUID = "0000112f-0000-1000-8000-00805f9b34fb"; //standard pbap uuid

mSocket = mDevice.createInsecureRfcommSocketToServiceRecord(ParcelUuid.fromString(PBAP_UUID).getUuid());

mSocket.connect();

早くやれよ。

于 2012-09-29T03:11:36.693 に答える