Java Libgdx Android应用程序上的Mac地址或IMEI

Java Libgdx Android应用程序上的Mac地址或IMEI,java,android,libgdx,mac-address,Java,Android,Libgdx,Mac Address,我正在用LIGBDX开发一个android应用程序,我需要从手机上获取MAC地址或IMEI或任何其他唯一代码。当使用Java.net中的NetworkInterface时,它在桌面项目上运行良好,但在Android上不起作用,因此我在互联网上看到了WifiManager, 是一个来自android的API(我猜) WifiManager wifiMan=(WifiManager)this.getSystemService(Context.WIFI_服务); WifiInfo wifiInf=wi

我正在用LIGBDX开发一个android应用程序,我需要从手机上获取MAC地址或IMEI或任何其他唯一代码。当使用Java.net中的NetworkInterface时,它在桌面项目上运行良好,但在Android上不起作用,因此我在互联网上看到了WifiManager, 是一个来自android的API(我猜)

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

它看起来很管用,但我用的是LIBGDX,我没有在我的项目中导入安卓.Net,看到一个家伙说,当我试图在LIBGDX上引用纯安卓时,我只能在安卓上工作,而不是在内核中,但我不知道怎么做。 也许可以将Wifimanager.java添加到库中,我尝试过,但没有成功

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

(一) 在核心项目中声明一个接口,并使用一个方法来检索所需的编号

public interface IActivityRequestHandler {

    public String getUniqueId();
}
在核心项目中,向游戏类添加一个构造函数,该构造函数将IActivityRequestHandler作为参数:

public abstract class MyGame extends Game {
     ...
     public IActivityRequestHandler handler;
     ...
     public MyGame(IActivityRequestHandler handler){
    this.handler = handler;
}
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;
        }
    ...
}
您将使用“handler”调用特定于平台的方法

(二) 让android MainActivity实现这个接口,并编写返回所需值的方法

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

public abstract class MyGame extends Game {
     ...
     public IActivityRequestHandler handler;
     ...
     public MyGame(IActivityRequestHandler handler){
    this.handler = handler;
}
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中调用的任何对象,这将不起作用,并且,您必须使用处理程序在线程之间进行通信

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

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

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

在我的例子中,可能是mac地址,因为该应用程序就像在线投票,ppl需要打开wifi才能投票,所以我可以获得mac地址,是的,3G是一个问题,我将处理后者。ppl现在只能用wifi投票,是生活呵呵。如果我生成UUID并将其存储在手机上,如果ppl卸载并安装应用程序,数据将丢失,或者我错了?你是对的。正如我所说,我还没有找到一个获得唯一id的干净解决方案。另一件事我还没有研究,但可能会提供一些解决方案,那就是Google Play许可证。我无法让它工作,一些人对我感到困惑,没有其他方法可以从android.net调用wifimanager?错误:此行有多个标记-覆盖android.app.Activity.onCreate-构造函数选择()未定义,但我进行了构造函数公共选择(IActivityRequestHandler){this.handler=handler;}