試試這個:
1) 聲明一個接口在您的核心項目與一個方法來檢索你想要的數字。
public interface IActivityRequestHandler {
public String getUniqueId();
}
在你的核心項目,一個構造函數添加到您的遊戲類需要一個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中調用的任何東西,這將不起作用,並且,你必須使用處理程序在線程之間進行通信。
2)您的桌面版本也必須實現IActivityRequestHandler。
3)在Android設備中獲取唯一的ID是我還沒有找到一個很好的解決方案。 a)平板電腦除非有電話線,否則沒有IMEI或電話號碼。 b)MAC地址不是唯一的(你有3g,wifi,藍牙),有時不可用,例如,如果wifi關閉。
4)你可能更適合自己生成一個唯一的ID並將其存儲在手機上。 谷歌「Java UUID」。
在我的情況下可能是mac地址,因爲該應用程序就像是一個在線投票和ppl需要打開wifi投票,所以我可以得到mac地址,是的3G是一個問題,我會處理後者。現在ppl只能用wifi投票了,就是生活呵呵。 是一種複雜的做所有這些東西,嘿嘿,我會在這裏嘗試。 – Thaffareu
如果我生成UUID並在手機上存儲,如果ppl卸載並安裝應用程序的數據將丟失,或者我錯了? – Thaffareu
你說得對。正如我所說我沒有找到一個乾淨的解決方案獲得一個唯一的ID。我還沒有看到的另一件事,但可能提供一些解決方案是Google Play許可。 – Juan