1
votes

I have a game I'm working on, that uses AndEngine.

AndEngine has a "BaseGameActivity" and so does Google Play Game Service. I had to rename BaseGameActivity from AndEngine to AEBaseGameActivity and have it as a parent class BaseGameActivity instead of Activity.

But it is giving me this error:

Caused by: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
        at com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:226)
        at org.andengine.util.ActivityUtils.requestFullscreen(ActivityUtils.java:56)
        at org.andengine.ui.activity.AEBaseGameActivity.applyEngineOptions(AEBaseGameActivity.java:427)
        at org.andengine.ui.activity.AEBaseGameActivity.onCreate(AEBaseGameActivity.java:83)

Now AndEngine has this piece of code:

public static void requestFullscreen(final Activity pActivity) {
        final Window window = pActivity.getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        window.clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
        window.requestFeature(Window.FEATURE_NO_TITLE);
    }

if I comment the requestFeature line, my projects runs! But it has an ugly title bar.

Does anyone please know a fix for this ?

EDIT, HERE IS SOME MORE CODE:

PS: AEBaseGameActivity.php extends BaseActivity which extends BaseGameActivity (previously just activity)

AEBaseGameActivity.php

public abstract class AEBaseGameActivity extends BaseActivity implements IGameInterface, IRendererListener {
    @Override
    protected void onCreate(final Bundle pSavedInstanceState) {
        if(BuildConfig.DEBUG) {
            Debug.d(this.getClass().getSimpleName() + ".onCreate" + " @(Thread: '" + Thread.currentThread().getName() + "')");
        }

        super.onCreate(pSavedInstanceState);

        this.mGamePaused = true;

        this.mEngine = this.onCreateEngine(this.onCreateEngineOptions());
        this.mEngine.startUpdateThread();

        this.applyEngineOptions(); //REQUEST FULLSCREEN

        this.onSetContentView(); //SET CONTENT VIEW
    }

    ...

    private void applyEngineOptions() {
        final EngineOptions engineOptions = this.mEngine.getEngineOptions();

        if(engineOptions.isFullscreen()) {
            ActivityUtils.requestFullscreen(this); //ACTIVITY UTIL SHOWN LATER
        }

        ...
    }

    ...

    protected void onSetContentView() {
        this.mRenderSurfaceView = new RenderSurfaceView(this);
        this.mRenderSurfaceView.setRenderer(this.mEngine, this);

        this.setContentView(this.mRenderSurfaceView, AEBaseGameActivity.createSurfaceViewLayoutParams());
    }
}

ActivityUtils.java

public class ActivityUtils {

    public static void requestFullscreen(final Activity pActivity) {
        final Window window = pActivity.getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        window.clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
        window.requestFeature(Window.FEATURE_NO_TITLE); //IF COMMENTING THIS, THE GAME IS RUNNING
    }

    ...

}

EDIT2:

The code is basically only AndEngine, here is the original code:

https://github.com/nicolasgramlich/AndEngine/tree/GLES2/src/org/andengine/ui/activity

My changes:

  • renamed BaseGameActivity to AEBaseGameActivity
  • BaseActivity extends BaseGameActivity (taken from Google Play Game Service) instead of Activity
  • BaseGameActivity and GameHelper.java taken from BaseGameUtils from Google Play Game Service.
2
as in log requestFeature() must be called before adding content means you are trying to call requestFeature() method after setContentView. - ρяσѕρєя K

2 Answers

1
votes

Ok so this is what I did:

  • I commented out the line that is causing the problem (ActivityUtils.java line 56 of AndEngine)
  • I added this in my activity to the Android Manifest:

    android:theme="@android:style/Theme.NoTitleBar"

It ends up looking something like:

<activity
                android:name=".GameActivity"
                android:theme="@android:style/Theme.NoTitleBar"
                android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
0
votes

Exception requestFeature() must be called before adding content telling everything

call requestFullscreen() before setContenview()

Edit

try REQUEST FULLSCREEN after super.onCreate()

@Override
protected void onCreate(final Bundle pSavedInstanceState) {
    super.onCreate(pSavedInstanceState);
    this.applyEngineOptions();  //REQUEST FULLSCREEN