Android не может запустить класс Android, который расширяет активность от другого действия - PullRequest
0 голосов
/ 10 ноября 2011

Я не смог найти никакой помощи, которая бы работала для меня, так что это особый сценарий начала деятельности. У меня есть проект, в котором у меня есть класс MrNom

public class MrNomGame extends AndroidGame {

    public Screen getStartScreen() {
            return new LoadingScreen(this);
    }

класс AndroidGame выглядит так:

public abstract class AndroidGame extends Activity implements Game{
    /**
     * @uml.property  name="renderView"
     * @uml.associationEnd  inverse="game:ro.lasting.androidgames.framework.impl.AndroidFastRenderView"
     */
    public static AndroidFastRenderView renderView;//we draw to this and it manages the main loop thread
    /**
     * @uml.property  name="graphics"
     * @uml.associationEnd  
     */
    private Graphics graphics;
    /**
     * @uml.property  name="audio"
     * @uml.associationEnd  
     */
    private Audio audio;
    /**
     * @uml.property  name="input"
     * @uml.associationEnd  
     */
    private Input input;
    /**
     * @uml.property  name="fileIO"
     * @uml.associationEnd  
     */
    private FileIO fileIO;
    /**
     * @uml.property  name="screen"
     * @uml.associationEnd  
     */
    private Screen screen;//holds the currently active screen
    /**
     * @uml.property  name="wakeLock"
     * @uml.associationEnd  
     */
    private WakeLock wakeLock;//we use this to keep the screen for dimming

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        /*make activity fullscreen*/
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);
        //setup artificial framebuffer
        boolean isLandscape = getResources().getConfiguration().orientation ==
        Configuration.ORIENTATION_LANDSCAPE;

        int frameBufferWidth = isLandscape ? 480 : 480;
        int frameBufferHeight = isLandscape ? 320 : 320;
        Bitmap frameBuffer = Bitmap.createBitmap(frameBufferWidth,
        frameBufferHeight, Config.RGB_565);//Bitmap instance has an RGB565 color format for not wasting memory and speed up the drawing
        //Calculate scaleX and scaleY values that SingleTouchHandler 
        // and MultiTouchHandler classes will use to transform the 
        // touch event coordinates to our fixed-coordinate system
        float scaleX = (float) frameBufferWidth / getWindowManager().getDefaultDisplay().getWidth();

        float scaleY = (float) frameBufferHeight / getWindowManager().getDefaultDisplay().getHeight();

        //renderView = new AndroidFastRenderView(this, frameBuffer);
        graphics = new AndroidGraphics(getAssets(), frameBuffer);
        fileIO = new AndroidFileIO(getAssets());
        audio = new AndroidAudio(this);
        input = new AndroidInput(this, renderView, scaleX, scaleY);
        screen = getStartScreen();

        setContentView(renderView);
        //if(ro.lasting.androidgames.mrnom.MainMenuScreen.sinvite)setContentView(ro.lasting.androidgames.mrnom.R.layout.invite);

        PowerManager powerManager = (PowerManager)
        getSystemService(Context.POWER_SERVICE);
            wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "GLGame");

    }

    public void onResume() {
        super.onResume();
        wakeLock.acquire();
        screen.resume();
        renderView.resume();
    }

    public void onPause() {
        super.onPause();
        wakeLock.release();
        renderView.pause();
        screen.pause();
        if (isFinishing())
            screen.dispose();
    }

    /**
     * @return
     * @uml.property  name="input"
     */
    public Input getInput() {
        return input;
    }

    /**
     * @return
     * @uml.property  name="fileIO"
     */
    public FileIO getFileIO() {
        return fileIO;
    }

    /**
     * @return
     * @uml.property  name="graphics"
     */
    public Graphics getGraphics() {
        return graphics;
    }

    /**
     * @return
     * @uml.property  name="audio"
     */
    public Audio getAudio() {
        return audio;
    }

    /**
     * @param screen
     * @uml.property  name="screen"
     */
    public void setScreen(Screen screen) {
        if (screen == null)
            throw new IllegalArgumentException("Screen must not be null");

        this.screen.pause();
        this.screen.dispose();
        screen.resume();
        screen.update(0);
        this.screen = screen;
    }
    public Screen getCurrentScreen() {
        return screen;
    }   
}

и у меня также есть соответствующий файл манифеста, который содержит следующее:

<activity android:name=".MrNomGame"
                  android:label="@string/app_name"
                  android.screenOrientation="landscape"
                    android:configChanges="keyboard|keyboardHidden|orientation">
             <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

Это приложение отлично работает. Но если я пытаюсь вставить это в другое приложение, я получаю силу близко. Мой другой проект такой:

public class MainActivity extends Activity{
     @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.endgame);      

             Intent intent = new Intent(this,MrNomGame.class);
             //intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
             startActivity(intent);
     }

с файлом манифеста ядра:

<activity android:name=".MainActivity" android:theme="@style/ThemeFullScreenNoTitle"
            android:label="@string/app_name" android:screenOrientation="landscape">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".MrNomGame" android:label="@string/app_name"
            android.screenOrientation="landscape" android:configChanges="keyboard|keyboardHidden|orientation">

Я бы ожидал, что это сработает, но это не так. Я пробовал весь день, и я не могу запустить свой первый урок (MrNomGame) с моей MainActivity. Однако сам по себе он работает просто отлично, как видно из первой части моего вопроса. Извините за этот большой кусок кода и большой вопрос, но я просто хотел, чтобы вам было легче понять эту конкретную проблему, которую я получаю. Итак, как я могу начать MrNomGame с моей основной деятельности? Спасибо.

Ответы [ 2 ]

2 голосов
/ 18 ноября 2011
                      android:name=".MrNomGame"

Это не сработает, попробуйте использовать полное имя.Lyk

                android:name="YourPackageName.MrNomGame"

Извините, если я совершенно не прав.

1 голос
/ 10 ноября 2011

Попробуйте изменить android.screenOrientation на android:screenOrientation.Это может быть не так, поскольку это работает в 1 приложении, но не в другом, но, тем не менее, это опечатка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...