美文网首页iOS蓝牙开发iOS蓝牙开发蓝牙BLE
不需要权限的获取蓝牙mac地址方法

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

作者: f9dd77add98e | 来源:发表于2016-08-25 13:57 被阅读575次

应用场景

很多手机或者手机助手都会有拦截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地址

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

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

String bluetoothAddress = Settings.Secure.getString(getContentResolver(), "bluetooth_address");

这个方法的优点是不需要权限,缺点是只有4.2之后的系统才可使用此方法

6.0以后的系统,已经不再能获取到蓝牙地址

网易云捕-网易旗下最专业的APP质量跟踪平台

相关文章

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

    应用场景 很多手机或者手机助手都会有拦截APP权限的功能,如果权限被拦截,就不能正常获取到需要的信息。不过系统对权...

  • iOS 蓝牙连接获取MAC地址的方法

    iOS 蓝牙连接获取MAC地址的方法 iOS自从7以后就无法从API直接获取设备的MAC地址,只能用UU...

  • Android Mac地址

    android系统6.0之后,对mac地址的获取添加了权限,按照普通的方法获取如下: 但是这种情况,获取到的mac...

  • 获取android手机mac地址

    android系统6.0之后,对mac地址的获取添加了权限,按照普通的方法获取如下: 但是这种情况,获取到的mac...

  • 操作系统资源

    蓝牙 获取Mac(根据系统版本,不同方式获取Mac地址:getLocalMacAddressFromWifiInf...

  • 微信小程序蓝牙授权多次弹出问题

    以下两个方法都会获取蓝牙权限(推荐第一个获取蓝牙权限,第二个主要是判断蓝牙是否打开) 方法一: 方法二:

  • Android 6.0 蓝牙Mac地址获取

    Android 6.0以后获取到的Mac地址都是常量:02:00:00:00:00:00 蓝牙Mac地址获取 Wi...

  • 蓝牙数据NSdata解析(swift版)

    获取蓝牙Mac地址 func getBleMAcAdressWithData(data :NSData) -> N...

  • iOS-蓝牙项目经验总结(上)

    蓝牙开发中碰到的几个技术点: 0),蓝牙协议制定; 1),蓝牙密钥配对; 2),获取蓝牙Mac地址; 3),实时...

  • iOS 蓝牙交互的坑

    1.获取mac地址的问题 刚开始做蓝牙开发的时候,翻遍了Apple的文档和各个论坛,希望能找到不需要连接蓝牙设备就...

网友评论

  • Freerain:最后一句 “6.0以后的系统,已经不再能获取到蓝牙地址” 这个指的是 哪个方法??

本文标题:不需要权限的获取蓝牙mac地址方法

本文链接:https://www.haomeiwen.com/subject/kycasttx.html