精华内容
下载资源
问答
  • 蓝牙address
    更多相关内容
  • 如果我理解正确,你有一个MAC...这应该工作:BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);BluetoothSocket tmp = null;BluetoothSocket mmSocket = null;// Get a BluetoothSocket for a ...

    如果我理解正确,你有一个MAC地址作为一个字符串,你想连接到设备,对吗?这应该工作:

    BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);

    BluetoothSocket tmp = null;

    BluetoothSocket mmSocket = null;

    // Get a BluetoothSocket for a connection with the

    // given BluetoothDevice

    try {

    tmp = device.createRfcommSocketToServiceRecord(MY_UUID);

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

    tmp = (BluetoothSocket) m.invoke(device, 1);

    } catch (IOException e) {

    Log.e(TAG, "create() failed", e);

    }

    mmSocket = tmp;

    该应用程序是用于调试蓝牙连接和原始协议数据的简单工具. (现在只有在ascii中,我打算添加功能来调试十六进制.)

    展开全文
  • android 从6.0开始,通过BluetoothAdapter....本人也尝试过其他方法获取,比如从cat /sys/class/net/wlan0/address 或者/sys/class/net/eth0/address路径获取,该方式有些手机能获取得到,有的不能或缺,获取到的Mac 地
  • 从Android6.0开始,通过BluetoothAdapter.getDefaultAdapter().getAddress()获取的地址是一个固定值02:00:00:00:00...下面通过反射的方式获取蓝牙地址:public static String getBtAddressByReflection() {Bluetooth...

    从Android6.0开始,通过BluetoothAdapter.getDefaultAdapter().getAddress()获取的地址是一个固定值02:00:00:00:00:00,部分从低版本升级到6.0的手机也还是可以获取真实的MAC地址的。下面通过反射的方式

    获取蓝牙地址:

    public static String getBtAddressByReflection() {

    BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

    Field field = null;

    try {

    field = BluetoothAdapter.class.getDeclaredField("mService");

    field.setAccessible(true);

    Object bluetoothManagerService = field.get(bluetoothAdapter);

    if (bluetoothManagerService == null) {

    return null;

    }

    Method method = bluetoothManagerService.getClass().getMethod("getAddress");

    if(method != null) {

    Object obj = method.invoke(bluetoothManagerService);

    if(obj != null) {

    return obj.toString();

    }

    }

    } catch (NoSuchFieldException e) {

    e.printStackTrace();

    } catch (IllegalAccessException e) {

    e.printStackTrace();

    } catch (NoSuchMethodException e) {

    e.printStackTrace();

    } catch (InvocationTargetException e) {

    e.printStackTrace();

    }

    return null;

    }

    展开全文
  • Android Bluetooth蓝牙设备地址修改

    千次阅读 2021-01-05 17:09:24
    Android Bluetooth蓝牙设备地址修改 读取蓝牙设备地址在蓝牙初始化的时候获取: bt_status_t btif_init_bluetooth() { /* As part of the init, fetch the local BD ADDR */ memset(&btif_local_bd_addr, 0, ...

    一、蓝牙设备地址获取

    bt_status_t btif_init_bluetooth()
    {
        /* As part of the init, fetch the local BD ADDR */
        memset(&btif_local_bd_addr, 0, sizeof(bt_bdaddr_t));
        btif_fetch_local_bdaddr(&btif_local_bd_addr);
    }
    
    #ifndef PROPERTY_BT_BDADDR_PATH // Btif_common.h (external\bluetooth\bluedroid\btif\include)
    #define PROPERTY_BT_BDADDR_PATH         "ro.bt.bdaddr_path"
    #endif
    
    #ifndef PERSIST_BDADDR_PROPERTY
    #define PERSIST_BDADDR_PROPERTY         "persist.service.bdroid.bdaddr"
    #endif
           
    static void btif_fetch_local_bdaddr(bt_bdaddr_t *local_addr)
    {
        char val[256];
        uint8_t valid_bda = FALSE;
        int val_size = 0;
        const uint8_t null_bdaddr[BD_ADDR_LEN] = {0,0,0,0,0,0};
    
        /* Get local bdaddr storage path from property */
        if (property_get(PROPERTY_BT_BDADDR_PATH, val, NULL))
        {
            int addr_fd;
    
            BTIF_TRACE_DEBUG("local bdaddr is stored in %s", val);
    
            if ((addr_fd = open(val, O_RDONLY)) != -1)
            {
                memset(val, 0, sizeof(val));
                read(addr_fd, val, FACTORY_BT_BDADDR_STORAGE_LEN);
                str2bd(val, local_addr);
                /* If this is not a reserved/special bda, then use it */
                if (memcmp(local_addr->address, null_bdaddr, BD_ADDR_LEN) != 0)
                {
                    valid_bda = TRUE;
                    BTIF_TRACE_DEBUG("Got Factory BDA %02X:%02X:%02X:%02X:%02X:%02X",
                        local_addr->address[0], local_addr->address[1], local_addr->address[2],
                        local_addr->address[3], local_addr->address[4], local_addr->address[5]);
                }
    
                close(addr_fd);
            }
        }
    
        if(!valid_bda)
        {
            val_size = sizeof(val);
            if(btif_config_get_str("Local", "Adapter", "Address", val, &val_size))
            {
                str2bd(val, local_addr);
                BTIF_TRACE_DEBUG("local bdaddr from bt_config.xml is  %s", val);
                return;
            }
         }
    
        /* No factory BDADDR found. Look for previously generated random BDA */
        if ((!valid_bda) && \
            (property_get(PERSIST_BDADDR_PROPERTY, val, NULL)))
        {
            str2bd(val, local_addr);
            valid_bda = TRUE;
            BTIF_TRACE_DEBUG("Got prior random BDA %02X:%02X:%02X:%02X:%02X:%02X",
                local_addr->address[0], local_addr->address[1], local_addr->address[2],
                local_addr->address[3], local_addr->address[4], local_addr->address[5]);
        }
    
        /* Generate new BDA if necessary */
        if (!valid_bda)
        {
            bdstr_t bdstr;
            /* Seed the random number generator */
            srand((unsigned int) (time(0)));
    
            /* No autogen BDA. Generate one now. */
            local_addr->address[0] = 0x22;
            local_addr->address[1] = 0x22;
            local_addr->address[2] = (uint8_t) ((rand() >> 8) & 0xFF);
            local_addr->address[3] = (uint8_t) ((rand() >> 8) & 0xFF);
            local_addr->address[4] = (uint8_t) ((rand() >> 8) & 0xFF);
            local_addr->address[5] = (uint8_t) ((rand() >> 8) & 0xFF);
    
            /* Convert to ascii, and store as a persistent property */
            bd2str(local_addr, &bdstr);
    
            BTIF_TRACE_DEBUG("No preset BDA. Generating BDA: %s for prop %s",
                 (char*)bdstr, PERSIST_BDADDR_PROPERTY);
    
            if (property_set(PERSIST_BDADDR_PROPERTY, (char*)bdstr) < 0)
                BTIF_TRACE_ERROR("Failed to set random BDA in prop %s",PERSIST_BDADDR_PROPERTY);
        }
    
        //save the bd address to config file
        bdstr_t bdstr;
        bd2str(local_addr, &bdstr);
        val_size = sizeof(val);
        if (btif_config_get_str("Local", "Adapter", "Address", val, &val_size))
        {
            if (strcmp(bdstr, val) ==0)
            {
                // BDA is already present in the config file.
                return;
            }
        }
        btif_config_set_str("Local", "Adapter", "Address", bdstr);
        btif_config_save();
    }
    

    二、蓝牙设备地址修改

    获取地址的顺序:

    1. 获取属性ro.bt.bdaddr_path里面蓝牙设备地址的路径,然后打开保存蓝牙地址的文件从中读取设备地址。
    2. 从bt_config.xml中读取蓝牙设备地址。
    3. 生成随机地址。
    4. 将地址保存到属性persist.service.bdroid.bdaddr和bt_config.xml中。

    根据以上提到的四点去修改设备地址。

    三、蓝牙设备地址类型修改

    BlueDroid协议栈根据是否开启Privacy特性选择使用的地址类型。
    然后在设置广播参数、扫描参数和发起连接的时候会把地址类型一起发送出去。

    Btif_core.c (external\bluetooth\bluedroid\btif\src)

    static void btif_dm_upstreams_evt(UINT16 event, char* p_param)
    	BTA_DmBleConfigLocalPrivacy(BLE_LOCAL_PRIVACY_ENABLED);
    		p_msg->hdr.event = BTA_DM_API_LOCAL_PRIVACY_EVT;
            p_msg->privacy_enable   = privacy_enable;
            bta_sys_sendmsg(p_msg);
    

    BTA_DM_API_LOCAL_PRIVACY_EVT消息对应执行函数是bta_dm_action里面的bta_dm_ble_config_local_privacy。

    const tBTA_DM_ACTION bta_dm_action[] =
    #if BLE_PRIVACY_SPT == TRUE
        bta_dm_ble_config_local_privacy,   /* BTA_DM_API_LOCAL_PRIVACY_EVT */
        BTM_BleConfigPrivacy (p_data->ble_local_privacy.privacy_enable);
    #endif
    
    void BTM_BleConfigPrivacy(BOOLEAN enable)
    {
        tBTM_BLE_CB     *p_cb = &btm_cb.ble_ctr_cb;
    
        if (p_cb->privacy != enable)
        {
            p_cb->privacy = enable;
            if (p_cb->privacy)
            {
                /* generate resolvable private address */
                btm_gen_resolvable_private_addr((void*)btm_gen_resolve_paddr_low);
            }
            else /* if privacy disabled, always use public address */
            {
                p_cb->addr_mgnt_cb.own_addr_type = BLE_ADDR_PUBLIC;
            }
    
            if (BTM_BleMaxMultiAdvInstanceCount() > 0)
                btm_ble_multi_adv_enb_privacy(p_cb->privacy);
        }
    }
    

    修改方法:
    1) 直接修改Bt_target.h中BLE_LOCAL_PRIVACY_ENABLED宏的值
    Bt_target.h (external\bluetooth\bluedroid\include)

    #ifdef HAS_BDROID_BUILDCFG
    #include "bdroid_buildcfg.h"
    #endif
    /*
     * Toggles support for general LE privacy features such as remote address
     * resolution, local address rotation etc.
     */
    #ifndef BLE_PRIVACY_SPT
    #define BLE_PRIVACY_SPT         TRUE
    #endif
    
    /*
     * Enables or disables support for local privacy (ex. address rotation)
     */
    #ifndef BLE_LOCAL_PRIVACY_ENABLED
    #define BLE_LOCAL_PRIVACY_ENABLED         TRUE
    #endif
    

    2) 在bdroid_buildcfg.h中定义BLE_LOCAL_PRIVACY_ENABLED。

    device/generic/common/bluetooth/bdroid_buildcfg.h

    #ifndef _BDROID_BUILDCFG_H
    #define _BDROID_BUILDCFG_H
    
    #define BLE_LOCAL_PRIVACY_ENABLED         FALSE
    
    #endif
    
    展开全文
  • 一个BLE设备的标识地址(Identity Address)可以Public Device Address 或 Random Device Address。如果设备正在使用 可解析的私有地址,它也应该有一个身份地址。 设备地址又可细分为一下几种类型: 1.Public ...
  • c/c++ windows 通过winrt操作ble 蓝牙 #include #include #include #include <winrt/Windows.Foundation.Collections.h> #include #include #include #include #include <winrt/Windows.Storage.Streams.h>
  • 蓝牙地址问题

    千次阅读 2018-06-22 15:10:21
    Version]下文涉及的NVRAM LID和蓝牙地址均与具体蓝牙芯片有关,请注意区别[SOLUTION]蓝牙地址长度为6bytes, 每台蓝牙设备都应有一个唯一的蓝牙地址。目前,蓝牙地址的使用需要向IEEE申请授权使用。1. 蓝牙芯片的...
  • 通过adb 获取 蓝牙 mac address

    千次阅读 2019-06-13 20:23:04
    adb shell settings get secure bluetooth_address 或者 // for Android 4.4.4 adb shell service call bluetooth_manager 10 // for Android 5.0+ adb shell service call bluetooth_manager 12 编程获取...
  • Bluetooth MAC Address Changer尽管许多设备允许您手动修改该参数,依靠第三方软件可能会被证明是更快、更有效。蓝牙MAC地址改变的应用程序,可以帮助您在这种情况下。 如果你的工作涉及到修补各种硬件组件,你可能了解...
  • Bluetooth Device Address 蓝牙设备地址分成两类:公开设备地址(public device address)和随机地址(random device address) 1 public device address 1.1 BR/EDR public device address BLUETOOTH DEVICE ...
  • 本工具仅支持CSR或博通芯片的蓝牙适配器,用于修改适配器MAC地址,具体相关使用说明,可以从网上获得,两台电脑不同时间使用同一个蓝牙设备,那就需要这软件把两台电脑的蓝牙适配器MAC地址和蓝牙密钥修改成一样的,...
  • "蓝牙串口助手(Android Studio源码) public void onActivityResult(int requestCode, int resultCode, Intent data) { Log.e(TAG, ""onActivityResult""); switch (requestCode) { case REQUEST_CONNECT_DEVICE...
  • if len(sys.argv) == 2 else ADDRESS)) 该例子里可以看到: 调用该脚本可以输入参数,参数为蓝牙设备地址,如果未填写参数,则用默认的 ADDRESS 主函数中先扫描指定的蓝牙设备,如果找到了对它连接并发现其服务 将...
  • 1、 微信小程序蓝牙控制继电器及串口调试 微信小程序源代码 2、微信小程序蓝牙控制继电器,灯等设备,蓝牙串口调试助手等功能。 3、小程序云开发功能。
  • 在android 设备中 用 adb shell settings get secure bluetooth_address 命令 获取到的不是真正的蓝牙MAC地址 怎么办?? 在settings_secure.xml 中bluetooth_address也是这个假的地址 求助!!
  • 众所周知,众多通信协议上都离不开地址的概念,大名鼎鼎的IP地址、基石的MAC地址,蓝牙Mesh也不例外,本文将着重讲解Mesh地址的概念,希望能够给读者以清晰的理解。 地址的分类 在蓝牙Mesh规范中,将地址分为四类: ...
  • Android连接TSC蓝牙打印机进行打印,多种连接方式,问题整理,参考文档,实现代码 Instructions for Android TSC Bluetooth/Ethernet library functions 有关 Android TSC 蓝牙/以太网库功能的说明 1. open...
  • :battery: :headphone: 蓝牙耳机电池电量 这是一个Python脚本,用于获取某些蓝牙耳机的电池电量。...bluetooth_battery BT_MAC_ADDRESS_1 ... 您可以输入任意数量的设备地址,并用空格分隔。 依赖项pybluez应该自
  • BLE设备有多种类型的设备地址,如Public Device Address、Random Device Address、Static Device Address、Private Device Address等等。 2. BLE设备的地址类型 一个BLE设备,可以使用两种类型的地址(一个BLE...
  • 蓝牙,时下最流行的智能设备传输数据的方式之一,通过手机app和智能设备进行连接,获取设备上的测量数据,我们生活中随处可见的比如蓝牙智能手环,蓝牙电子秤,...String address = info.substring(info.length() - 17)
  • 蓝牙协议介绍

    2022-04-02 15:14:52
    1、广播(ADV,Advertising) 1.1、BLE 报文结构 BLE引入access address 概念,用来指明接收者身份 概 ,其中, 0x8E89BED6 这个access address 比较特殊,它表示要发给周边所有设备,即广播。 GAP层引入了LTV...
  • android_address office365++ study kotlin 算法练习 Framework to address: gradlew compileDebugSources 错误查找 魔法指示器(TabLayout) 任玉刚 retrofit util OKHTTP 网络框架 statusBarUtils litePal 数据库...
  • Android 蓝牙 MAC 地址的读取和修改

    千次阅读 2020-12-26 18:54:22
    最近在高通 QCM6125 平台上,通过 QXDM 修改 BT MAC(NV 447)的时候,发现可以成功修改,但是系统设置-关于手机里的蓝牙address 显示并没有变化,因此怀疑蓝牙 MAC 读取的时候并没有去 NV447 里读取,于是搜索资料...
  • 蓝牙 - 设备地址

    千次阅读 2022-01-31 21:27:14
    每一个蓝牙设备都会被分配一个唯一的48-bit的蓝牙地址(BD_ADDR),也叫蓝牙MAC地址,用来识别唯一的蓝牙设备。 对于使用BR/EDR物理通道的经典蓝牙来说,其实用的是蓝牙public地址。 该地址应是根据IEEE 802-2014...
  • Access Address PDU - LL Data Access Address 白名单 Non-resolvable private address Public Device Address Static Device Address 参考文章 蓝牙协议分析(9)_BLE安全机制之LL Privacy 蓝牙协议分析(6)_...
  • 1.wifi mac地址,多播地址,address[0]&0x01 == 0x01 ;wifi P2P地址 address[0] &0x0F == 0x02 2.蓝牙地址要求说明
  • BK3431S蓝牙芯片数据手册软硬件参考设计开发包资料,可做为你的学习设计参考。 BK3431S CPU Address.xlsx BK3431S Datasheet_V1.4.pdf change list.txt OTA工具及说明 uascent资料 硬件参考设计资料 软件参考设计...
  • 【BLE】蓝牙设备地址

    2022-06-14 13:51:11
    蓝牙设备通过地址和地址类型来标识自己,地址类型指示是public device address(公共地址)或者random device address(随机地址),两种设备地址都是48bit的。 一个设备至少包含一种地址类型,可以同时包含两种。 当...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,332
精华内容 4,532
关键字:

蓝牙address