为Android蓝牙连接定义密码 [英] Defining Passkey for Android Bluetooth Connection

查看:166
本文介绍了为Android蓝牙连接定义密码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

再次需要您的帮助:

我想与obd2-bluetooth-adapter建立连接.因此,我看了来自AndroidSDK的BluetoothChat-Example.我能够建立与计算机的连接,但无法将android平板电脑与odb2-bluetooth-adapter(elm327)配对.找到了一些提示,例如:

I want to establish a connection to a obd2-bluetooth-adapter. For that reason i had a look at the BluetoothChat-Example from the AndroidSDK. I am able to establish a connection to my computer, but i am not able to pair my android tablet with my odb2-bluetooth-adapter (elm327). Found some hints, for instance :

    myRemoteBluetoothDevice.setPassKey(....); 

首先,我无法在"myRemoteBluetoothDevice"上使用该功能-然后我不知道在哪里使用此功能.在连接线程内?

First, i can not use the function on 'myRemoteBluetoothDevice' - and then i don't know where to use this function. Within the 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);
}

我认为可能的解决方案是实现事件监听器或类似的东西,当远程设备需要密码时调用该事件监听器?但是我必须在哪里实施呢?而我必须在哪里使用呢?有人可以帮我吗?

I think a possible solution would be to implement a event-listener or something like this, which is called when the remote device needs a passcode ? But where i have to implement it ? And where i have to use it ? Can somebody help me out there ?

提前谢谢!!!

PS:我的应用"基于以下示例: https://android.googlesource.com/platform/development/+/25b6aed7b2e01ce7b​​dc0dfa1a79eaf009ad178fe/samples/BluetoothChat/src/com/example/android/BluetoothChat/BluetoothChatService.java

PS : My App is based on the following example : https://android.googlesource.com/platform/development/+/25b6aed7b2e01ce7bdc0dfa1a79eaf009ad178fe/samples/BluetoothChat/src/com/example/android/BluetoothChat/BluetoothChatService.java

试图实现第一个答案:

我的BroadcastReceiver:

My 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:

And my connect-method, where i register the broadcastReceiver :

    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);
    }
}

非常感谢您的帮助!提前致谢.

Would really appreciate your help ! Thanks in advance.

没有人暗示

推荐答案

注册广播侦听器:android.bluetooth.device.action.PAIRING_REQUEST.

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

一次:

    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);

这篇关于为Android蓝牙连接定义密码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆