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

  • 摘要:

不少手机或者手机助手都会有拦截APP权限的功能,若是权限被拦截,就不能正常获取到须要的信息。不过系统对权限的控制其实并不完美,仍是有方法能够绕过的。这里以蓝牙mac地址作为示例,分享一种绕过系统权限控制的方法。java

  • 经常使用的获取bluetooth mac代码以下:

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

不过这个方法须要权限android

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

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

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地址数据库

数据库内容截图以下所示:ide

  • 绕开限制获取MAC地址:

不过sdk里,并无提供这样的接口去获取这个值,不过AndroidID也是保存在这个sqlite里的,使用相似的调用方法就能够获取这个值spa

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

看完了云捕技术人员提供的方法, 是否是以为茅塞顿开呢!code

相关文章
相关标签/搜索