没有用户输入PIN和使用Android API进行确认的Android蓝牙配对 [英] Android Bluetooth Pairing without User Enter Pin and Confirmation Using Android API

查看:301
本文介绍了没有用户输入PIN和使用Android API进行确认的Android蓝牙配对的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是Android编程的初学者,因为我才3个月前才开始.我正在做一个使用蓝牙将android应用程序连接到arduino的项目.我已经有一个android应用程序的代码(bluetooth.adapter,sockets等).用于连接的代码已在工作.目标之一是让android应用与蓝牙设备配对时自动输入密码,而无需要求用户输入PIN.

此论坛上的旧帖子没有太大帮助. (许多建议使用不安全模式,但我确实需要安全模式,在我的情况下,arduino是服务器,而手机应用程序是客户端,因此createInsecureRfcommSocketToServiceRecord()服务器方法对我不起作用)

我在android开发人员网站中搜索了有关bluetoothdevice类的内容:

setPairingConfirmation(布尔值确认) 确认用于PAIRING_VARIANT_PASSKEY_CONFIRMATION配对的密码.

PAIRING_VARIANT_PIN =将提示用户输入图钉,或者应用程序将为用户输入图钉."

PAIRING_VARIANT_PASSKEY_CONFIRMATION =将提示用户确认屏幕上显示的密码,或者应用程序将确认用户的密码"

似乎使用了密码,该应用将是输入密码并确认的应用 使其成为自动连接"功能的密码,但是android站点未提供有关如何使用此功能的示例代码.你们中的任何人在使用此过程或相关过程时都有示例代码吗?感谢您的帮助!

解决方案

首先要澄清的是,此解决方案是为较新版本的API(15或更高版本?)设计的.

我找到了另一篇文章中写的答案(请参阅

然后在您的活动或片段(无论您想发起配对的地方),您可以调用以下定义的pairDevice()方法来调用配对尝试(这将生成ACTION_PAIRING_REQUEST)

private void pairDevice(BluetoothDevice device) {
    try {
        Log.d(TAG, "Start Pairing... with: " + device.getName());
        device.createBond();
        Log.d(TAG, "Pairing finished.");
    } catch (Exception e) {
        Log.e(TAG, e.getMessage());
    }
}

I'm a beginner in Android programming since I only started 3 months ago. I'm doing a project which connects the android app to arduino using bluetooth. I already have a code for the android app (bluetooth.adapter,sockets,.etc.). The code for connection is already working. One of the goal is for the android app to automatically input the password when pairing with the bluetooth device without asking user to input the PIN.

The old posts on this forum do not help much. (many suggested using insecure mode, but I do need secure mode, also in my case, the arduino is the server while cellphone app is the client, so the createInsecureRfcommSocketToServiceRecord() server method does not work for me)

I searched and found this in android developer site about bluetoothdevice class:

setPairingConfirmation(boolean confirm) Confirm passkey for PAIRING_VARIANT_PASSKEY_CONFIRMATION pairing.

PAIRING_VARIANT_PIN = "The user will be prompted to enter a pin or an app will enter a pin for user".

PAIRING_VARIANT_PASSKEY_CONFIRMATION = "The user will be prompted to confirm the passkey displayed on the screen or an app will confirm the passkey for the user"

Seems using the code, the app will be the one to input the password and confirm the password making it an "auto-connect" features but the android site does not give a sample code on how to use this. Does any of you have a sample code in using this or related process? I appreciate your help!

解决方案

First to clarify, this solution is designed for newer version of API (15 or later?)

I found the answer written in another post (see Roldofo's answer in Here). Here is my reorganized answer with detailed code.

In a nutshell, you need to setup a broadcast receiver to trap the ACTION_PAIRING_REQUEST, and then programmatically pass the PIN and confirm.

Register a broadcast receiver:

    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_PAIRING_REQUEST);
    getActivity().registerReceiver(mPairingRequestReceiver, filter);

The definition of the receiver:

private final BroadcastReceiver mPairingRequestReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (action.equals(BluetoothDevice.ACTION_PAIRING_REQUEST)) {
            try {
                    BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                    int pin=intent.getIntExtra("android.bluetooth.device.extra.PAIRING_KEY", 1234);
                    //the pin in case you need to accept for an specific pin
                    Log.d(TAG, "Start Auto Pairing. PIN = " + intent.getIntExtra("android.bluetooth.device.extra.PAIRING_KEY",1234));
                    byte[] pinBytes;
                    pinBytes = (""+pin).getBytes("UTF-8");
                    device.setPin(pinBytes);
                    //setPairing confirmation if neeeded
                    device.setPairingConfirmation(true);
            } catch (Exception e) {
                Log.e(TAG, "Error occurs when trying to auto pair");
                e.printStackTrace();
            }
        }
    }
};

Then at your activity or fragment (wherever you want to initiate the pairing), you can call the following defined pairDevice() method to invoke pairing attempt (which will generate a ACTION_PAIRING_REQUEST)

private void pairDevice(BluetoothDevice device) {
    try {
        Log.d(TAG, "Start Pairing... with: " + device.getName());
        device.createBond();
        Log.d(TAG, "Pairing finished.");
    } catch (Exception e) {
        Log.e(TAG, e.getMessage());
    }
}

这篇关于没有用户输入PIN和使用Android API进行确认的Android蓝牙配对的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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