Android获取蓝牙地址

最近做一个项目,发现Android6.0以上的版本获取的蓝牙地址始终为02:00:00:00,
Google一下发现Android早就封掉了相关接口,于是想到反射的方式去获取Mac地址,在此记录一下

Android 6.0以下的版本

直接使用bluetoothadapter.getaddress()

Android 6.0以上

private String getBluetoothAddress(BluetoothAdapter adapter) {
        if (adapter == null) {
            return null;
        }

        Class<? extends BluetoothAdapter> btAdapterClass = adapter.getClass();
        try {
            Field mServiceField = adapter.getClass().getDeclaredField("mService");
            mServiceField.setAccessible(true);
            Object btManagerService = mServiceField.get(adapter);
            if (btManagerService != null) {
                 return (String) btManagerService.
                            getClass(.getMethod("getAddress").invoke(btManagerService);
            } else {
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            LogWriter.writeLog(TAG, e.getMessage());
            return null;
        }
}

PS:有的手机需要在蓝牙已经打开的时候才能获取到

posted @ 2018-07-06 17:26  炼金术士  阅读(4512)  评论(0编辑  收藏  举报