我试图了解如何将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
/**
* 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代码如何能够找出这条信息。
答案 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地址。