文档章节

不需要权限的获取蓝牙mac地址方法

网易云捕
 网易云捕
发布于 2016/07/18 09:11
字数 522
阅读 363
收藏 0
  • 摘要:

很多手机或者手机助手都会有拦截APP权限的功能,如果权限被拦截,就不能正常获取到需要的信息。不过系统对权限的控制其实并不完美,还是有方法可以绕过的。这里以蓝牙mac地址做为示例,分享一种绕过系统权限控制的方法。

  • 常用的获取bluetooth mac代码如下:

String getBluetoothAddress(){                                                   
    String blueMac="";                                                          
    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();  
    if (mBluetoothAdapter != null)                                              
    {                                                                           
        blueMac = mBluetoothAdapter.getAddress();                               
    }                                                                           
    return blueMac;                                                      
} 

不过这个方法需要权限

<uses-permission android:name="android.permission.BLUETOOTH" />

4.2以后的Android源码,新增了BluetoothManagerService.java,里面这样的实现

private static final String SECURE_SETTINGS_BLUETOOTH_ADDR_VALID="bluetooth_addr_valid";  
private static final String SECURE_SETTINGS_BLUETOOTH_ADDRESS="bluetooth_address";  
private static final String SECURE_SETTINGS_BLUETOOTH_NAME="bluetooth_name";  
/** 
 * Save the Bluetooth name and address in the persistent store. 
 * Only non-null values will be saved. 
 * @param name 
 * @param address 
 */  
private void storeNameAndAddress(String name, String address) {  
    if (name != null) {  
        Settings.Secure.putString(mContentResolver, SECURE_SETTINGS_BLUETOOTH_NAME, name);  
        mName = name;  
        if (DBG) Log.d(TAG,"Stored Bluetooth name: " +  
            Settings.Secure.getString(mContentResolver,SECURE_SETTINGS_BLUETOOTH_NAME));  
    }  
   
    if (address != null) {  
        Settings.Secure.putString(mContentResolver, SECURE_SETTINGS_BLUETOOTH_ADDRESS, address);  
        mAddress=address;  
        if (DBG)  Log.d(TAG,"Stored Bluetoothaddress: " +  
            Settings.Secure.getString(mContentResolver,SECURE_SETTINGS_BLUETOOTH_ADDRESS));  
    }  
    if ((name != null) && (address != null)) {  
        Settings.Secure.putInt(mContentResolver, SECURE_SETTINGS_BLUETOOTH_ADDR_VALID, 1);  
    }  
}  

会在/data/data/com.android.providers.settings/databases/settings.db数据库里增加bluetooth_address,保存蓝牙mac地址

数据库内容截图如下所示:

  • 绕开限制获取MAC地址:

不过sdk里,并没有提供这样的接口去获取这个值,不过AndroidID也是保存在这个sqlite里的,使用类似的调用方法就可以获取这个值

String bluetoothAddress = Settings.Secure.getString(getContentResolver(), "bluetooth_address");  
  1. 这个方法的优点是不需要权限,缺点是只有4.2之后的系统才可使用此方法
  2. 6.0以后的系统,已经不再能获取到蓝牙地址

看完了云捕技术人员提供的方法, 是不是觉得茅塞顿开呢!

© 著作权归作者所有

网易云捕
粉丝 9
博文 9
码字总数 12305
作品 0
杭州
私信 提问
加载中

评论(0)

不需要任何权限获得Android设备的唯一ID

Is there a unique Android device ID? Android设备有没有唯一的id?如果有的话,我怎么通过java代码获得这个id? 我读了stack OverStack上每一个答案,谷歌的开发者博客和Android文档,我认...

TCTW
2017/10/25
237
0
Android获取当前手机蓝牙Mac地址(5.0,6.0-7.0,8.0-9.0) -(进行中),蓝牙电话

注意:当前Android手机5.0,6.0-7.0能获取蓝牙Mac地址;而当前Android手机8.0-9.0蓝牙Mac地址获取不到,API被隐藏的更深了?? Oreo(Android O) 8.0 2017年8月22日 API level 26 Oreo(And...

desaco
2019/01/30
0
0
Android 标识符(MAC,IMEI,ANDROID ID)

硬件标识符访问权(MAC) MAC地址具有全局唯一性,无法被用户重置,恢复出厂设置后也不会变化 Android 6.0 的变更 从Android6.0,本地设备的MAC地址(WLAN和蓝牙),无法通过提供的api 和获取到了,这...

小燕子的空间
03/31
0
0
详细解析BluetoothAdapter

一 BluetoothAdapter简介 1.继承关系 该类仅继承了Object类; 2.该类作用 BluetoothAdapter代表了移动设备的本地的蓝牙适配器, 通过该蓝牙适配器可以对蓝牙进行基本操作, 例如 : 启动设备发现...

我叫leo-
2016/04/26
73
0
Android 蓝牙 API 之 BluetoothAdapter 类

使用BluetoothAdapter类,你能够在Android设备上查找周边的蓝牙设备然后配对(绑定),蓝牙通讯是基于唯一地址MAC来相互传输的,考虑到安全问题Bluetooth通讯时需要先配对。然后开始相互连接,...

无鸯
2011/09/06
2.6K
1

没有更多内容

加载失败,请刷新页面

加载更多

openGL学习笔记——帧缓冲

作用:主要用来存储渲染数据,即是显存。 几何数据(顶点坐标、纹理坐标等)和纹理经过一系列渲染管道最终计算出屏幕上的所有像素点,它们需要一个地方来存放,这个地方就是帧缓冲。帧缓冲中...

黑白双键
4分钟前
3
0
刚得到一台centos7服务器,作为Java程序员应该做的事

1.JDK的卸载安装 卸载掉服务器本来的OPENJDK,安装ORELOC的JDK 检查是否已经安装了jdk rpm -qa | grep jdk 如果有的话,就卸载了再装 rpm -e --nodeps java-1.7.0-openjdk 去Oracle下载一...

ytuan996
36分钟前
56
0
ConcurrentHashMap(1.8)源码剖析

ConcurrentHashMap(JDK1.8)学习记录 看了忘忘了看系列之ConcurrentHashMap,本文主要记录下通过看ConcurrentHashMap源码学习到的知识点。主要有以下几个点。文章稍长,需要耐心阅读。 1、Con...

DoubleCherish
38分钟前
44
0
mysql之explain详解(分析索引最佳使用)

mysql之explain详解(分析索引最佳使用) mysql explain用于分析sql 语句的执行及数据库索引的使用。本文将致力于帮助大家充分理解explain所返回的各项参数,从而使大家快速掌握explain用法技...

科比可比克
昨天
38
0
如何比较两个不同分支的文件? - How to compare files from two different branches?

问题: I have a script that works fine in one branch and is broken in another. 我有一个脚本在一个分支中工作正常,在另一个分支中被破坏。 I want to look at the two versions side-...

技术盛宴
昨天
29
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部