首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用Android API无需用户输入Pin和确认即可进行Android蓝牙配对

使用Android API无需用户输入Pin和确认即可进行Android蓝牙配对
EN

Stack Overflow用户
提问于 2016-02-20 05:00:11
回答 3查看 32.8K关注 0票数 11

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

这个论坛上的旧帖子没有多大帮助。(许多人建议使用不安全模式,但我确实需要安全模式,在我的例子中,arduino是服务器,而手机应用程序是客户端,所以createInsecureRfcommSocketToServiceRecord()服务器方法对我不起作用)

我在android开发人员站点上搜索并找到了关于bluetoothdevice类的内容:

用于PAIRING_VARIANT_PASSKEY_CONFIRMATION配对的setPairingConfirmation(布尔确认)确认密钥。

PAIRING_VARIANT_PIN =“将提示用户输入个人识别码,或者应用程序将为用户输入个人识别码”。

PAIRING_VARIANT_PASSKEY_CONFIRMATION =“系统将提示用户确认屏幕上显示的密钥,或者应用程序将为用户确认密钥。”

似乎是在使用代码,应用程序将输入密码并确认密码,使其成为“自动连接”功能,但android网站没有给出如何使用的示例代码。你们中有谁有使用这个或相关过程的示例代码吗?非常感谢您的帮助!

EN

回答 3

Stack Overflow用户

发布于 2016-02-20 22:15:43

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

我在另一篇文章中找到了答案(参见Roldofo在Here中的答案)。这是我重新组织的答案和详细的代码。

简而言之,您需要设置一个广播接收器来捕获ACTION_PAIRING_REQUEST,然后以编程方式传递PIN码并确认。

注册广播接收器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_PAIRING_REQUEST);
    getActivity().registerReceiver(mPairingRequestReceiver, filter);

接收器的定义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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();
            }
        }
    }
};

然后,在您的活动或片段(您想要启动配对的任何地方)处,您可以调用下面定义的pairDevice()方法来调用配对尝试(这将生成一个ACTION_PAIRING_REQUEST)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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());
    }
}
票数 14
EN

Stack Overflow用户

发布于 2018-06-13 09:25:00

我也面临着同样的问题,在所有的研究之后,我找到了下面的解决方案。

(已测试并正常工作!)

我基本上是在寻找一个特定的蓝牙设备(我知道MAC地址),一旦找到就与之配对。要做的第一件事是使用boradcast receiver创建配对请求,并按如下方式处理请求。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
IntentFilter intentFilter = new IntentFilter(BluetoothDevice.ACTION_PAIRING_REQUEST);
                intentFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
                registerReceiver(broadCastReceiver,intentFilter);

您需要编写broadcastReceiver并按如下方式处理它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String BLE_PIN = "1234"
private BroadcastReceiver broadCastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if(BluetoothDevice.ACTION_PAIRING_REQUEST.equals(action))
        {
            BluetoothDevice bluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            bluetoothDevice.setPin(BLE_PIN.getBytes());
            Log.e(TAG,"Auto-entering pin: " + BLE_PIN);
            bluetoothDevice.createBond();
            Log.e(TAG,"pin entered and request sent...");
        }
    }
};

瞧!你应该能够在没有任何人工干预的情况下配对到蓝牙设备。

希望这对你有帮助:-)如果对你有用,请给出正确的答案。

票数 3
EN

Stack Overflow用户

发布于 2020-05-05 10:27:03

是的,这可以通过代码来完成

在主活动中,添加以下代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
BluetoothReceiver myreceiver = new BluetoothReceiver();
var intentfilterparingrequest = new IntentFilter(BluetoothDevice.ActionPairingRequest);
RegisterReceiver(myreceiver, intentfilterparingrequest);

在广播接收器中编写以下代码,如果没有,则创建一个新广播接收器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class BluetoothReceiver : BroadcastReceiver
{
    public override void OnReceive(Context context, Intent intent)
    {
        string BLE_PIN = "0000";
        var action = intent.Action;
        switch (action)
        {
            case BluetoothDevice.ActionPairingRequest:
                BluetoothDevice bluetoothDevice = 
              (BluetoothDevice)intent.GetParcelableExtra(BluetoothDevice.ExtraDevice);
                bluetoothDevice.SetPin(Encoding.ASCII.GetBytes(BLE_PIN));
                bluetoothDevice.CreateBond();
                break;
        }
    } 
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35519321

复制
相关文章
Android蓝牙开发(二)之蓝牙配对和蓝牙连接
上篇文章:https://blog.csdn.net/huangliniqng/article/details/82185983
黄林晴
2019/01/10
4.4K0
Android蓝牙开发(二)之蓝牙配对和蓝牙连接
上篇文章:https://blog.csdn.net/huangliniqng/article/details/82185983
全栈程序员站长
2022/09/07
3.3K0
Android蓝牙配对弹出框过程分析 Android蓝牙配对弹出框过程分析
Android蓝牙配对弹出框过程分析 根据远程蓝牙设备(remote devices)的要求,手机端发起与远程蓝牙设备Bluetooth remote Device的配对有两种情况 第一种:配对时需要pin码(pin request event)即有配对请求pairing request :所对应的action为 : BluetoothDevice.ACTION_PAIRING_REQUEST。  根据远程设备所携带的type信息判断是否可以获取到pairingkey      type值通过Blu
fanfan
2018/01/24
5.9K0
Android 9.0 蓝牙配对流程
DeviceListPreferenceFragment是蓝牙扫描到的设备列表,点击其中一个蓝牙设备,调用onPreferenceTreeClick方法开始蓝牙的配对过程。
用户7557625
2020/07/15
2.2K0
Android蓝牙配对弹出框过程分析
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zrf1335348191/article/details/54020225
fanfan
2019/05/27
3.1K0
android开发之蓝牙主动配对连接手机
上一篇介绍了手机配对连接的三种方式,这篇以完整的一个代码实例介绍如何搜索周围的蓝牙设备,以及主动配对,连接。
全栈程序员站长
2022/03/11
7540
Android BLE 蓝牙开发,连接蓝牙设备进行通讯
讲解如何通过 UUID 连接蓝牙设备。如果你针对 GATT 服务不太了解。那么这篇应该能够稍微帮助到你。
zinyan.com
2023/07/14
5.7K0
Android BLE 蓝牙开发,连接蓝牙设备进行通讯
NDSS2019议题解读:通过恶意蓝牙外设打破安卓安全机制
原文标题:Breaking Android Security Mechanisms via Malicious Bluetooth Peripherals
绿盟科技研究通讯
2019/12/11
2.4K0
NDSS2019议题解读:通过恶意蓝牙外设打破安卓安全机制
android开发之蓝牙配对连接的方法「建议收藏」
最近在做蓝牙开锁的小项目,手机去连接单片机总是出现问题,和手机的连接也不稳定,看了不少蓝牙方面的文档,做了个关于蓝牙连接的小结。
全栈程序员站长
2022/03/11
4K0
无需用户确认关闭当前网页
如果我们在使用window.close的时候,IE下会出现这样的提示,告知用户是否确认关闭当前的网页(如下图所示)
meteoric
2019/02/25
1.7K0
无需用户确认关闭当前网页
使用saripaar对android输入控件进行快速验证
该文介绍了如何使用saripaar库对Android输入控件进行快速验证。首先介绍了什么是saripaar,然后详细描述了如何使用saripaar进行输入控件的验证,并给出了示例代码。
MJ.Zhou
2018/01/04
1.5K0
如何使用Android-PIN-Bruteforce爆破Android的锁屏密码
在这篇文章中,我们将教大家如何通过暴力破解Android手机的锁屏密码来解锁Android设备。并介绍Android-PIN-Bruteforce工具,该工具可以将你的Kali Nethunter手机转换成一台针对Android设备的暴力破解PIN码设备,而且无需进行Root也无需adb。
FB客服
2021/05/20
3.4K0
如何使用Android-PIN-Bruteforce爆破Android的锁屏密码
Android 蓝牙操作
该BluetoothAdapter可以执行基本的蓝牙任务,例如启动设备发现,查询配对的设备列表,使用已知的MAC地址实例化一个BluetoothDevice类,并创建一个BluetoothServerSocket监听来自其他设备的连接请求
码客说
2019/10/22
1.5K0
android蓝牙测试
注意点:在执行getBondedDevices时候会花费一点时间,一开始我不知道,“已配对”一直没出现,以为出错了。后来上了趟厕所回来发现就有了!!!!尴尬!
提莫队长
2019/02/21
1K0
Android 蓝牙开发(1)
Android 平台包含蓝牙网络堆栈支持,凭借此支持,设备能以无线方式与其他蓝牙设备交换数据。应用框架提供了通过 Android Bluetooth API 访问蓝牙功能的途径。使用 Bluetooth API Android 应用可以执行下面的操作:
开发者
2019/12/26
2.5K0
Android 蓝牙4.0
相对其他传输方式的优势(蓝牙2.1,3.0,wifi): 1,相对wifi和zigbee无线方案,蓝牙和无线射频模块nRF24l01成本会低很多,wifi的好处是可以比较方便实现远程控制,距离比较远,信号也相对比较稳定。 2,健康类的应用有人做出产品的 但不是基于蓝牙4.0低功耗的 还是用蓝牙2.1的spp协议来做的,蓝牙2.1或者3.0的耗电是个比较大的问题,一些小外设,需要用纽扣电池的应用就无法真正使用,对一些创意产品如果需要经常换电池或充电对用户体验都会大打折扣,成本也会大大提高。 3,iPho
用户1733354
2018/05/22
1.3K0
Android开发笔记(一百六十二)蓝牙设备的连接与配对
蓝牙是一种短距离无线通信技术,它由爱立信公司于1994年创制,原本想替代连接电信设备的数据线,但是后来发现它也能用于移动设备之间的数据传输,所以蓝牙技术在手机上获得了长足发展。 因为手机内部的通讯芯片一般同时集成了2G/3G/4G、WIFI和蓝牙,所以蓝牙功能已经是智能手机的标配了。若想进行蓝牙方面的开发,需要在App工程的AndroidManifest.xml中补充下面的权限配置:
aqi00
2019/01/18
3.4K0
Android蓝牙开发(一)之打开蓝牙和设备搜索
https://blog.csdn.net/huangliniqng/article/details/82185635
黄林晴
2019/01/10
2.4K0
Android蓝牙开发—经典蓝牙和BLE(低功耗)蓝牙的区别
最近在做蓝牙开发,刚接触时傻傻的分不清经典蓝牙和低功耗蓝牙的区别,一直用开发低功耗蓝牙的方法去连接经典蓝牙设备,最后当然是一直连接不上了。在此记录下经典蓝牙和低功耗蓝牙的区别和联系。
全栈程序员站长
2022/07/05
5K0
Android蓝牙开发—经典蓝牙和BLE(低功耗)蓝牙的区别
点击加载更多

相似问题

android蓝牙配对无需用户pin输入即可编程实现

114

Android -无需配对即可连接多个蓝牙设备

13

android无需配对即可通过蓝牙发送文件

11

无需用户配对确认即可将蓝牙与Zebra打印机配对

12

无需用户确认的蓝牙配对

61
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文