博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
不需要权限的获取蓝牙mac地址方法
阅读量:7108 次
发布时间:2019-06-28

本文共 2486 字,大约阅读时间需要 8 分钟。

hot3.png

  • 摘要:

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

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

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

不过这个方法需要权限

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以后的系统,已经不再能获取到蓝牙地址

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

转载于:https://my.oschina.net/u/816213/blog/713593

你可能感兴趣的文章
Log4j针对不同包指定level
查看>>
Android中怎么启动关闭Service及功能解释
查看>>
SpringBoot入门八,添加定时任务
查看>>
我的友情链接
查看>>
SpringMVC springMVC的拦截器
查看>>
Zabbix的安装部署
查看>>
php把二维数组转化为字符串
查看>>
目录与文件属性——《Unix/Linux编程实践教程》读书笔记
查看>>
5年麦肯锡工作经验的GG总结的Word骨灰级操作大全
查看>>
Xcode下载
查看>>
python operator计算模块
查看>>
SVN版本冲突解决详解
查看>>
nginx rewrite规则
查看>>
浅谈javascript:void(0)的含义
查看>>
IOS学习动画一之 UIKit动画
查看>>
tomcat编码乱码问题
查看>>
Spring中的自动装配(AutoWire)
查看>>
016,spring boot集成Mybatis之多数据源
查看>>
关于JOptionPane的一些东西
查看>>
STM32学习笔记2——RC522
查看>>