Android无法启动从其他活动扩展活动的android类

时间:2011-11-10 13:28:11

标签: android android-activity

我找不到任何对我有帮助的帮助,所以这是启动活动的特殊情况。 我有一个项目,其中我有类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 个答案:

答案 0 :(得分:2)

                      android:name=".MrNomGame"

这不会起作用,请尝试使用完全限定名称。 Lyk

                android:name="YourPackageName.MrNomGame"

对不起,如果我完全错了。

答案 1 :(得分:1)

尝试将android.screenOrientation更改为android:screenOrientation。这可能不是它,因为它适用于1个应用程序而不是其他应用程序,但它仍然是一个错字。