不須要權限的獲取藍牙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

相關文章
相關標籤/搜索