Libgdx Android App上的Mac地址或IMEI

时间:2014-05-23 21:34:48

标签: java android libgdx mac-address

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

  

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

它看起来很有效,但是我使用LIBGDX并且我没有在我的项目中导入Android.Net,当我尝试在LIbgdx上引用纯机器人时,看到一个人说话我必须只在android上工作不是在Core中,但我不知道该怎么做。 也许将Wifimanager.java添加到库中我试过但不行。

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

1 个答案:

答案 0 :(得分:0)

试试这个:

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;
}

你将使用" handler"调用平台特定方法。

2) 让android MainActivity实现这个接口并编写methood以返回你需要的值。

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并将其存储在手机上。 google" Java UUID"。