如何获得wifi的BSSID我在Unity(C#)中连接?

时间:2016-09-19 06:51:41

标签: c# android unity3d wifi bssid

如何在Android和iOS手机上的Unity游戏应用程序中获取BSSID(我连接的wifi路由器的MAC地址,而不是我的设备MAC地址)?

我尝试了这些方法,但没有一个工作。我通过在游戏场景上打印来检查结果。请帮忙

*方法1:此代码工作正常并获得正确的BSSID信息,但它只适用于编辑器,当我将其构建到Android App时它无法正常工作,返回字符串什么都不是(非空但是空值)。

 string mac = "";
 var card = NetworkInterface.GetAllNetworkInterfaces().FirstOrDefault();
 if (card == null)
     return null;
 else
 {
     byte[] bytes = card.GetPhysicalAddress().GetAddressBytes();
     for (int i = 0; i < bytes.Length; i++)
     {
         mac = string.Concat(mac + (string.Format("{0}", bytes[i].ToString("X2"))));
         if (i != bytes.Length - 1)
         {
             //This is just for formating the final result
             mac = string.Concat(mac + ":");
         }
     }
     mac = card.GetPhysicalAddress().ToString();
     return mac;
 }

*方法2:我使用AndroidJavaClass调用Android函数在Android手机上获取BSSID,就像在Unity文档中一样。有关Unity中AndroidJavaClass和Android {/ 3}}类

的更多信息
 string mac = "";
 AndroidJavaClass jc = new AndroidJavaClass("android.net.wifi.WifiInfo");
 mac = jc.Call<string>("getBSSID");

我还通过修改&#34; AndroidManifest.xml&#34;添加了读取wifi状态的android权限。文件位置&#34; [项目位置] \资产\插件\ Android&#34;使用下面的代码

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

由于此方法无法在编辑器上运行,因此我在Android Phone上构建并运行此方法,但不返回任何字符串。任何人都可以帮助我。

2 个答案:

答案 0 :(得分:1)

您需要制作插件才能在移动设备上执行此操作。

对于iOS,您必须将此answer转换为插件,然后从C#调用它。有很多Unity iOS插件教程可以让你开始这个。

对于Android,如果在使用以下代码获取BSSID之前启用了Wifi,则应首先check

public static string getSSID()
{
    string tempSSID = "";

    try
    {
        using (var activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity"))
        {
            using (var wifiManager = activity.Call<AndroidJavaObject>("getSystemService", "wifi"))
            {
                tempSSID = wifiManager.Call<AndroidJavaObject>("getConnectionInfo").Call<string>("getSSID");
            }
        }
    }
    catch (Exception e)
    {

    }
    return tempSSID;
}

public static string getBSSID()
{
    string tempBSSID = "";

    try
    {
        using (var activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity"))
        {
            using (var wifiManager = activity.Call<AndroidJavaObject>("getSystemService", "wifi"))
            {
                tempBSSID = wifiManager.Call<AndroidJavaObject>("getConnectionInfo").Call<string>("getBSSID");
            }
        }
    }
    catch (Exception e)
    {

    }
    return tempBSSID;
}

请勿忘记包含权限<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

答案 1 :(得分:0)

使用此

import pandas as pd
import numpy as np

d = {'id': [1, 2, 2, 2], 
     'date': [np.datetime64('2019-07-01'), np.datetime64('2019-07-02'), 
              np.datetime64('2019-07-06'), np.datetime64('2019-07-19')]} 
df = pd.DataFrame(data=d)