0

再びあなたの助けが必要です:

obd2-bluetooth-adapter への接続を確立したい。そのため、AndroidSDK の BluetoothChat-Example を見てみました。コンピューターへの接続を確立できますが、Android タブレットを odb2-bluetooth-adapter (elm327) とペアリングできません。たとえば、いくつかのヒントが見つかりました:

    myRemoteBluetoothDevice.setPassKey(....); 

まず、「myRemoteBluetoothDevice」で機能を使用できません。次に、この機能をどこで使用すればよいかわかりません。connect-Thread 内?

    public synchronized void connect(BluetoothDevice device, boolean secure) {
      if (D) Log.d(TAG, "connect to: " + device);

      // Cancel any thread attempting to make a connection
      if (mState == STATE_CONNECTING) {
        if (mConnectThread != null) {mConnectThread.cancel(); mConnectThread = null;}
      }

      // Cancel any thread currently running a connection
      if (mConnectedThread != null) {mConnectedThread.cancel(); mConnectedThread = null;}

      // Start the thread to connect with the given device
      mConnectThread = new ConnectThread(device, secure);
      mConnectThread.start();
      setState(STATE_CONNECTING);
}

可能な解決策は、リモートデバイスがパスコードを必要とするときに呼び出されるイベントリスナーなどを実装することだと思いますか? しかし、どこに実装する必要がありますか? そして、どこでそれを使用する必要がありますか? 誰か助けてくれませんか?

前もって感謝します !!!

PS: 私のアプリは次の例に基づいています :

ご挨拶。

編集 :

最初の答えを実装しようとしました:

私の BroadcastReceiver :

    private final BroadcastReceiver mReceiverRequiresPin = new BroadcastReceiver(){

    @Override
    public void onReceive(Context context, Intent intent){

        try {
            BluetoothDevice newDevice =    intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            Class<?> btDeviceInstance =  Class.forName(BluetoothDevice.class.getCanonicalName());

            Method convert = btDeviceInstance.getMethod("convertPinToBytes", String.class);

            byte[] pin = (byte[]) convert.invoke(newDevice, "1234");

            Method setPin = btDeviceInstance.getMethod("setPin", byte[].class);
            boolean success = (Boolean) setPin.invoke(newDevice, pin);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
};

そして、broadcastReceiver を登録する私の connect-method :

    private void connect(CordovaArgs args, boolean secure,
    CallbackContext callbackContext) throws JSONException {

      final String actionPinRequested = "android.bluetooth.device.action.PAIRING_REQUEST";
    IntentFilter intentFilterPinRequested = new IntentFilter(actionPinRequested);

      cordova.getActivity().registerReceiver(mReceiverRequiresPin, intentFilterPinRequested);
    String macAddress = args.getString(0);
    BluetoothDevice device = bluetoothAdapter.getRemoteDevice(macAddress);

    if (device != null) {
        connectCallback = callbackContext;
        bluetoothSerialService.connect(device, secure);

        PluginResult result = new PluginResult(
                PluginResult.Status.NO_RESULT);
        result.setKeepCallback(true);
        callbackContext.sendPluginResult(result);

    } else {
        callbackContext.error("Could not connect to " + macAddress);
    }
}

助けていただければ幸いです。前もって感謝します。

誰もヒントを持っていません??

4

1 に答える 1

1

Register a broadcast listener for: android.bluetooth.device.action.PAIRING_REQUEST.

In the onrecieve:

    BluetoothDevice newDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
    Class<?> btDeviceInstance =  Class.forName(BluetoothDevice.class.getCanonicalName());

    Method convert = btDeviceInstance.getMethod("convertPinToBytes", String.class);

    byte[] pin = (byte[]) convert.invoke(newDevice, "1234");

    Method setPin = btDeviceInstance.getMethod("setPin", byte[].class);
    success = (Boolean) setPin.invoke(newDevice, pin);
于 2013-11-04T20:20:30.273 に答える