2015-04-22 6 views
2

Я хотел бы использовать собственный код для Android в моем проекте с помощью интерфейса.Интерфейсы libGDX для собственного кода Android

AndroidLauncher:

public int getNetworkState() { 
    int a; 

    ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

    if (mWifi.isConnected()) { 
     a=1; 
    } else { 
     a=0; 
    } 

    return a; 
} 

Core:

public interface NetworkState { 
    public int getNetworkState(); 

} 

Как я могу получить точное целое значение в основной проект?

ответ

3

Это решается, выполнив следующие действия:

Положите вашу платформу специальный код в класс, который реализует ваш интерфейс и ваш класс Game принимает интерфейс в качестве параметра в конструктор.

Итак, в базовом проекте у вас есть свой игровой класс;

public class GameInstance extends Game { 
    private NetworkState networkState; 

    public GameInstance(NetworkState networkState) { 
     this.networkState = networkState; 
    } 

    // override methods go below 
    ... 
} 

Кроме того, вы кладете интерфейс NetworkState в ядре:

public interface NetworkState { 
    public int getNetworkState();  
} 

В вашем Android проекта вы положили реализацию;

public AndroidNetworkState implements NetworkState { 
    public int getNetworkState() { 
     return 1; 
    } 
} 

И тогда в вашем AndroidLauncher вы создаете объект игры и передать его реализацию интерфейса:

@Override 
protected void onCreate (Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); 
    NetworkState networkState = new AndroidNetworkState(); // or whatever you called the class 
    initialize(new Game(networkState), config); 
} 

И тогда вы можете просто вызвать метод интерфейса в своем основном проекте:

... 
int networkStateResult = this.networkState.getNetworkState(); 
... 

Обязательно представьте реализацию для других платформ, если вы поддерживаете другие платформы.

+0

Мой класс в основном будет MainMenu. MainMenu.NetworkState networkState = new MainMenu.NetworkState(); Он говорит, что он абстрактный, не может быть создан. –

+0

Почему это абстрактный класс? –

+0

Что это значит? Это «нормально» .... Он говорит, что this.networkState не может решить. –

Смежные вопросы