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

  • 摘要:

很多手机或者手机助手都会有拦截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以后的系统,已经不再能获取到蓝牙地址

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值