你如何检索WiFi直接MAC地址?

use*_*025 3 android wifi-direct

我正在尝试检索Android设备的MAC地址.如果启用了WiFi,通常可以通过WiFiManager API实现.

如果WiFi关闭且WiFi Direct打开,有没有办法获取MAC地址?WiFi和WiFi Direct无法在手机上同时打开.

谢谢

Har*_*dhi 10

我在项目期间一直在寻找这个.我的要求是在使用WiFi Direct形成的adhoc P2p网络中唯一识别设备.每个设备在下次接近时都应该识别其朋友设备.我需要自己的WiFi(Direct)MAC和我的朋友们为这个朋友区域创建创建一个Key.

我的研究:设计的方式是有一个唯一的通用ID和一个本地ID.原因:通用ID只能用于连接到基础架构模式网络.本地ID可用于"ad-hoc"模式网络(设备到设备).在这种ad-hoc模式中,单个设备可能同时属于几个ad-hoc组.

  1. 因此,为了支持这种并发操作,P2p设备支持多个MAC实体,可能在不同的信道上.
  2. 对于每个会话,持久组可以为每个会话使用不同的信道和设备MAC.
  3. 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();
        }
Run Code Online (Sandbox Code Playgroud)

希望这有助于某人!