关于手机>状态无法使用WiFi MAC地址

时间:2018-10-31 16:14:15

标签: java android

我试图了解如何将WiFi和蓝牙MAC地址传递给android应用程序层。 在我的android 8代码中,我可以看到此日志

01-01 00:00:31.213   424   424 I SystemServiceManager: Starting com.android.server.BluetoothService
01-01 00:00:31.219   424   424 D BluetoothManagerService: Loading stored name and address
01-01 00:00:31.219   424   424 D BluetoothManagerService: Stored bluetooth Name=iMX6,Address=18:93:D7:1B:0E:E0

可能来自此文件 https://android.googlesource.com/platform/frameworks/base/+/e098050/services/java/com/android/server/BluetoothManagerService.java

/**
     * Retrieve the Bluetooth Adapter's name and address and save it in
     * in the local cache
     */
    private void loadStoredNameAndAddress() {
        if (DBG) Log.d(TAG, "Loading stored name and address");
        if (mContext.getResources().getBoolean
            (com.android.internal.R.bool.config_bluetooth_address_validation) &&
             Settings.Secure.getInt(mContentResolver, SECURE_SETTINGS_BLUETOOTH_ADDR_VALID, 0) == 0) {
            // if the valid flag is not set, don't load the address and name
            if (DBG) Log.d(TAG, "invalid bluetooth name and address stored");
            return;
        }
        mName = Settings.Secure.getString(mContentResolver, SECURE_SETTINGS_BLUETOOTH_NAME);
        mAddress = Settings.Secure.getString(mContentResolver, SECURE_SETTINGS_BLUETOOTH_ADDRESS);
        if (DBG) Log.d(TAG, "Stored bluetooth Name=" + mName + ",Address=" + mAddress);
    }

我也可以从中看到WiFi MAC地址值,

cat /sys/class/net/wlan0/address

我的困惑是,当我在设备中启用wifi和蓝牙功能时,我只能看到蓝牙的MAC地址,而看不到wifi。

1.java层代码如何知道蓝牙MAC地址?我在getprop上没有看到蓝牙MAC地址的任何.ro属性?

2。为什么Java层代码无法获取wifi mac地址并显示不可用?

3。只是让我了解Java代码是如何工作的?从何处以及如何获取蓝牙的MAC地址。

我主要在linux层工作,我不知道java代码如何能够找出这条信息。

1 个答案:

答案 0 :(得分:0)

此问题已通过以下链接解决,因为我正在使用TI wifi +蓝牙芯片,

http://processors.wiki.ti.com/index.php/WiLink8_Linux_Getting_Started_Guide

此链接将为TI的wpan和wlan提供git repos。 此存储库提供了我们可以构建并获取lib_driver_cmd_wl12xx.a库的C文件,这些文件对于Java> HIDL调用是必需的。

我只移植了wpan,却没有移植wlan,其中包含重要的调用,例如来自wlan接口的mac地址调用,在

driver_mac80211_nl.c

int wpa_driver_nl80211_driver_cmd(void *priv, char *cmd, char *buf,
                  size_t buf_len )
{
    .
    .
    linux_get_ifhwaddr(drv->global->ioctl_sock, bss->ifname, macaddr);
    .
    .
}

由于移植中的错误,我的wifi呼叫如

getMac

失败,返回null并给出了不可用的输出字符串。

在用Android O移植此仓库后,我可以构建所需的库并在about> settings> status中查看正确的mac地址。