2011-11-10 3 views
0

내게 도움이 될만한 도움을 찾을 수 없으므로 이것은 활동을 시작하는 특별한 경우의 시나리오입니다. 나는 내가 클래스 MrNom을 가지고있는 프로젝트를 가지고있는 AndroidGame 클래스는 다음과 같습니다Android가 다른 활동에서 활동을 확장하는 Android 클래스를 시작할 수 없습니다.

public class MrNomGame extends AndroidGame { 

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

:

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에서 실행할 수 없습니다. 그러나 그것의 자신의 그것에 내 질문의 첫 번째 부분에서 본대로 잘 작동합니다. 이 큰 코드와 큰 질문에 대해 유감스럽게 생각하지만이 문제를 이해하기 쉽도록하고 싶었습니다. 그렇다면 어떻게하면 주 활동에서 Mr.NomGame을 시작할 수 있습니까? 감사.

+1

강제 종료와 함께 기록 된 예외는 무엇입니까? – Jens

+0

응용 프로그램이 예기치 않게 중지되었습니다. 다시 시도하십시오. 그리고 로그 고양이는 약간의 활동 예외가 있습니다. – Fofole

+0

@Fofole, Jens는 logcat에 대해 이야기하고 있습니다. 휴대 전화의 메시지가 아닙니다. – SERPRO

답변

2

정상적으로 작동하지 않습니다. 정규화 된 이름을 사용하십시오. Lyk

   android:name="YourPackageName.MrNomGame" 

만약 내가 완전히 잘못했다면 죄송합니다.

+0

나는이 문제를 이미 고쳤습니다. 그러나 이것은 좋은 대답입니다. – Fofole

1

android.screenOrientationandroid:screenOrientation으로 변경해보십시오. 그럼에도 불구하고 1 개의 응용 프로그램에서 작동하지만 다른 응용 프로그램에서는 작동하지 않기 때문에 이것은 아닐 수도 있지만 그럼에도 불구하고 오타입니다.

+0

이것은 내 질문에 대답하지 않습니다 – Fofole

관련 문제