天天看點

android6.0擷取藍牙mac位址

幫着修改公司以前的項目的時候,客戶回報android 6.0以上藍牙相容有問題,android 6.0是一個大的變化,是以以前的很多方法并不适用了,Android6.0以上為了給使用者更多的資料保護,無法通路WiFi和藍牙的mac位址。

對使用者來說這是好事,但是對程式員就比較苦逼了,現在用藍牙技術的也不多了,在百度上找了半天也沒有擷取藍牙的新方法,全是以前的,是以說對程式員來說,還是盡量用google,最後在stackoverflow上找到了方法:

原文連結:

http://stackoverflow.com/questions/33377982/get-bluetooth-local-mac-address-in-marshmallow

private static String getBtAddressViaReflection() {
    BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    Object bluetoothManagerService = new Mirror().on(bluetoothAdapter).get().field("mService");
    if (bluetoothManagerService == null) {
        Log.w(TAG, "couldn't find bluetoothManagerService");
        return null;
    }
    Object address = new Mirror().on(bluetoothManagerService).invoke().method("getAddress").withoutArgs();
    if (address != null && address instanceof String) {
        Log.w(TAG, "using reflection to get the BT MAC address: " + address);
        return (String) address;
    } else {
        return null;
    }
}
           

記得要加上藍牙權限:

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

需要導入mirror包,下載下傳位址很多,github上也可以下載下傳,這裡貼出一個網址: http://mvnrepository.com/artifact/net.vidageek/mirror/1.6.1 用這個方法應該也可以擷取到wifi的mac位址,我沒有試過,有需要的朋友可以試試