0

私はPCに接続するAndroidアプリケーションを持っています。これはwinxpで動作しましたが、Win 7では動作しません。Windows7では、Bluetoothドングルを使用すると動作しますが、ラップトップのBluetooth2.1ソフトウェアでは動作しません。

このエラーが発生します accept()が失敗しました04-07 14:58:56.354:E / BluetoothService.cpp(196):stopDiscoveryNative:StopDiscoveryのD-Busエラー:org.bluez.Error.Failed(無効な検出セッション)

04-07 14:58:56.362:E / BluetoothEventLoop.cpp(196):onCreateDeviceResult:D-Busエラー:org.bluez.Error.AlreadyExists(Already Exists)

コード:

private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

// 聞く

    public AcceptThread() {
        BluetoothServerSocket tmp = null;

        // Create a new listening server socket
        try {
            tmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME, MY_UUID);
            //tmp = mAdapter.listenUsingInsecureRfcommWithServiceRecord(NAME, MY_UUID);

        } catch (IOException e) {
            Log.e(TAG, "listen() failed", e);
        }
        mmServerSocket = tmp;
    }

// 接続

    public ConnectThread(BluetoothDevice device) {
        mmDevice = device;
        BluetoothSocket tmp = null;

        // Get a BluetoothSocket for a connection with the
        // given BluetoothDevice
        try {
            tmp = device.createRfcommSocketToServiceRecord(MY_UUID);

            //tmp = device.createInsecureRfcommSocketToServiceRecord(MY_UUID);
        } catch (IOException e) {
            Log.e(TAG, "create() failed", e);
        }
        mmSocket = tmp;
    }

    public void run() {
        if (D) Log.d(TAG, "BEGIN mAcceptThread" + this);
        setName("AcceptThread");
        BluetoothSocket socket = null;

        // Listen to the server socket if we're not connected
        while (mState != STATE_CONNECTED) {
            try {
                // This is a blocking call and will only return on a
                // successful connection or an exception
                socket = mmServerSocket.accept();
            } catch (IOException e) {
                Log.e(TAG, "accept() failed", e);
                break;
            }

            // If a connection was accepted
            if (socket != null) {
                synchronized (BluetoothService.this) {
                    switch (mState) {
                    case STATE_LISTEN:
                    case STATE_CONNECTING:
                        // Situation normal. Start the connected thread.
                        connected(socket, socket.getRemoteDevice());
                        break;
                    case STATE_NONE:
                    case STATE_CONNECTED:
                        // Either not ready or already connected. Terminate new socket.
                        try {
                            socket.close();
                        } catch (IOException e) {
                            Log.e(TAG, "Could not close unwanted socket", e);
                        }
                        break;
                    }
                }
            }
        }
        if (D) Log.i(TAG, "END mAcceptThread");
    }
4

1 に答える 1

0

解決済み:Reflectionを使用する必要があります

m = device.getClass()。getMethod( "createRfcommSocket"、new Class [] {int.class});

于 2012-04-07T11:01:39.900 に答える