2011-11-10 100 views
0

我找不到任何适合我的帮助,因此这是启动活动的特定情况。 我有一个项目中,我有类MrNomAndroid无法启动从其他活动扩展活动的Android类

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); 
    } 

与coresponding清单文件:

<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"> 

我希望这个工作,但事实并非如此。我尝试了一整天,并且无法从我的MainActivity获得我的第一堂课(MrNomGame)。然而,就我自己的问题的第一部分而言,它本身就很好。对不起这段代码和一个大问题,但我只是想让你更容易理解我遇到的这个特定问题。那么,我如何从我的主要活动开始MrNomGame?谢谢。

+1

什么是与力关闭记录的异常? – Jens

+0

您的应用程序意外停止,请再试一次。在日志猫是一些活动异常。 – Fofole

+0

@Fofole,Jens正在谈论logcat ..而不是手机上的信息。 – SERPRO

回答

2
     android:name=".MrNomGame" 

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

   android:name="YourPackageName.MrNomGame" 

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

+0

我已经解决了这个问题,但这是一个很好的答案。 – Fofole

1

尝试更改android.screenOrientationandroid:screenOrientation。这可能不是它,因为它在1个应用程序中运行,但不是另一个,但它仍是一个错字。

+0

这不回答我的问题 – Fofole