【问题标题】:Mac Address or IMEI on Libgdx Android AppLibgdx Android 应用程序上的 Mac 地址或 IMEI
【发布时间】:2014-05-23 21:34:48
【问题描述】:

我正在使用 LIGBDX 为 android 开发 APP,我需要从手机中获取 MAC 地址或 IMEI 或任何其他唯一代码。当使用来自 Java.net 的 NetworkInterface 在桌面项目上工作正常时,但在 Android 上它不起作用,所以我在互联网上看到了 WifiManger, 是来自 android 的 API(我猜)。

WifiManager wifiMan = (WifiManager) this.getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInf = wifiMan.getConnectionInfo(); 字符串 macAddr = wifiInf.getMacAddress();

它看到它有效,但是我使用的是 LIBGDX,但我没有在我的项目中导入 Android.Net,当我尝试在 LIbgdx 上引用纯 android 时看到有人在说话,我只能在 android 上工作,而不是在核心,但我不知道该怎么做。 也许将 Wifimanager.java 添加到库中,我尝试过但不起作用。

注意:我正在使用 Gdx Net 并编辑清单,我正在从 iternet 下载和发送数据,我不能只做 mac 部分

【问题讨论】:

    标签: java android libgdx mac-address


    【解决方案1】:

    试试这个:

    1) 在您的核心项目中声明一个接口,并使用一种方法来检索您想要的数字。

    public interface IActivityRequestHandler {
    
        public String getUniqueId();
    }
    

    在您的核心项目中,向您的 Game 类添加一个以 IActivityRequestHandler 作为参数的构造函数:

    public abstract class MyGame extends Game {
         ...
         public IActivityRequestHandler handler;
         ...
         public MyGame(IActivityRequestHandler handler){
        this.handler = handler;
    }
    

    您将使用“处理程序”来调用特定于平台的方法。

    2) 让android MainActivity实现这个接口,编写方法返回你需要的值。

    3) 在您的 Android MainActivity 中,当您实例化您的 AndroidGame 时,将 MainActivity 作为参数传递:

    public class MainActivity extends AndroidApplication implements IActivityRequestHandler{
        ...
        ApplicationListener game;
        ....
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ...
            game = new AndroidMyGame(this);
            ...
        }
            public String getUniqueId(){
                return uniqueId;
            }
        ...
    }
    

    4) 现在,当您需要调用核心中的 id 时: handler.getUniqueId() (来自 MyGame 类) 如果您从 Android 设备运行游戏,这将调用您的 Android MainActivity 上的方法。

    重要提示:

    1) 如果您对 Android 中的 UI 线程没有任何限制,这应该可以工作。 也就是说,要返回一个它应该工作的值。如果你调用任何只能在 UIThread 中调用的东西,这将不起作用,此外,你必须使用 Handler 在线程之间进行通信。

    2) 您的桌面版本还必须实现 IActivityRequestHandler。

    3) 在 Android 设备中获取唯一 ID 是我尚未找到好的解决方案。 a) 平板电脑,除非有电话线,否则没有 IMEI 或电话号码。 b) MAC 地址不是唯一的(您有 3g、wifi、蓝牙),并且有时在 wifi 关闭时不可用。

    4) 您最好自己生成一个唯一的 id 并将其存储在手机上。 谷歌“Java UUID”。

    【讨论】:

    • 在我的情况下可能是mac地址,因为该应用程序就像在线投票,并且人们需要打开wifi才能投票,所以我可以获得mac地址,是的3G是一个问题,我会处理后者。 ppl现在只能用wifi投票,是生活呵呵。做所有这些事情有点复杂,呵呵,我会在这里尝试。
    • 如果我生成一个 UUID 并存储在手机上,如果 ppl 卸载并安装该应用程序会丢失数据,还是我错了?
    • 你是对的。正如我所说,我还没有找到获得唯一 ID 的干净解决方案。我还没有研究但可能提供一些解决方案的另一件事是 Google Play 许可。
    • 我无法让它工作,我有些困惑,没有其他方法可以让我从 android.net 调用 wifimanager 吗?
    • 错误:此行有多个标记 - 覆盖 android.app.Activity.onCreate - 构造函数 Election() 未定义但我做了构造函数 public Election (IActivityRequestHandler handler){ this.handler = handler; }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    • 2019-08-11
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    相关资源
    最近更新 更多