我正在尝试检索 Android 设备的 MAC 地址。如果 WiFi 已打开,这通常可以通过 WiFiManager API 实现。
如果 WiFi 关闭且 WiFi Direct 打开,有什么方法可以获取 MAC 地址吗?
我的手机上无法同时打开 WiFi 和 WiFi Direct。
Thanks
我在项目期间一直在寻找这个。我的要求是唯一地标识由 WiFi Direct 形成的自组织 P2p 网络中的设备。每个设备下次接近时都应该识别其朋友设备。我需要我自己的 WiFi(直连)MAC 和我朋友的 MAC 来为这个朋友区创建创建密钥。
我的研究:设计的方式是有一个唯一的通用ID和一个本地ID。Reason:通用 ID 只能用于连接到基础设施模式网络。本地 ID 可用于“ad-hoc”模式网络(设备到设备)。在这种自组织模式下,单个设备有可能同时属于多个自组织组。
- 因此,为了支持这种并发操作,P2p 设备支持
多个 MAC 实体,可能位于不同的通道上。
- 对于每个会话,持久组可以使用不同的通道和设备
每个会话的 MAC。
- P2P 设备在发现和协商期间使用其全局 MAC 地址作为设备 ID,并为组内的所有帧使用临时本地 MAC 地址。从这里理解
然而,没有直接的方法来获取自己的 WiFi P2p MAC 地址。问题 53437:Android.
在这个问题讨论中,谷歌的项目成员建议这是可能的,只是它还没有被记录下来
解决方案:使用意图过滤器WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION
和额外的
从意图WifiP2pManager.EXTRA_WIFI_P2P_DEVICE
这就是我在我的项目中使用它的方式:
@Override
public void onReceive(Context context, Intent intent) {
....
....
String action = intent.getAction();
if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION
.equals(action)) {
WifiP2pDevice device = (WifiP2pDevice) intent
.getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_DEVICE);
String myMac = device.deviceAddress;
Log.d(TAG, "Device WiFi P2p MAC Address: " + myMac);
/* Saving WiFi P2p MAC in SharedPref */
sharedPref = context.getSharedPreferences(context.getString(R.string.sp_file_name), Context.MODE_PRIVATE);
String MY_MAC_ADDRESS = sharedPref.getString(context.getString(R.string.sp_field_my_mac), null);
if (MY_MAC_ADDRESS == null || MY_MAC_ADDRESS != myMac) {
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString(context.getString(R.string.sp_field_my_mac), myMac);
editor.commit();
}
希望这对某人有帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)