我正在使用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部分
答案 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"。