Cocos2d-X에서 보안락 화면에서 게임 프로세스 처리방법.

2012. 7. 19. 10:48프로그래밍/Cocos2dX

728x90
반응형
Cocos2d-x로 멀티플랫폼 게임을 개발중입니다.
안드로이드에서는 몇가지 고려해야 하는 사항들이 있습니다.

iOS에서는 자동으로 처리해주는 부분들이 안드로이드에서는 개발자가 신경을 써야합니다.


우선 Sleep모드로 넘어간후에 보안락화면에서 게임의 onResume()함수가 호출됩니다.

따라서 보안락화면에서 배경음악이 출력되거나 원하지 않게 게임이 진행되는 상황이 발생됩니다.

이럴경우 onResume()에서 확실히 복귀된 후에 Pause했던 게임의 상태를 resume으로 변경해주도록 해야합니다.


1. 기존의 protected void onResume()를 다음과 같이 수정해줍니다.

  @Override

  protected void onResume() 

  {  

  super.onResume();  

  // 어플을 재시작하기 전에 보안락 화면인지를 먼저 확인을 해준다.

  // 보안락 화면에서는 게임 프로세스를 Resume하지 않도록 해준다.

  KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);  

  if (keyguardManager.inKeyguardRestrictedInputMode()) 

  {  

  IntentFilter unlockReceiverfilter = new IntentFilter();  

  unlockReceiverfilter.addAction(Intent.ACTION_USER_PRESENT);  

  scrUnlockReceiver = new ScreenUnlockReceiver();  

  registerReceiver(scrUnlockReceiver, unlockReceiverfilter);  

  } 

  else 

  {  

  // 보안락 화면이 아닐 경우에는 바로 게임을 Resume시켜준다.

  myResume();  

  }

  }



2. 실제로 게임을 resume할수 있는 메쏘드를 만들어 줍니다. 게임 프로세스와 음악을 일괄적으로 정지시켜준다.

  /**

   * 실제로 게임의 프로세스를 Resume 시켜준다.

   */

  public void myResume()

  {

NativeGameResume();

NativeMusicResume();

mGLView.onResume();

  }



3. 다음 ScreenUnlockReceiver class를 통해서 화면이 완전히 복귀되면 신호를 받아서 게임으로 계속 진행시켜주면 된다.

  /**

   * 화면이 완전히 복귀되면 onReceive메쏘드를 통해서 확인할 수 있습니다.

   *

   */

ScreenUnlockReceiver scrUnlockReceiver = null;

  private class ScreenUnlockReceiver extends BroadcastReceiver 

  {   

   @Override  

   public void onReceive(Context context, Intent intent) 

   {  

       String action = intent.getAction();  

       if (action.equals(Intent.ACTION_USER_PRESENT)) 

       {

        // 화면이 완전히 복귀하게되면 정지했던 게임을 계속진행해준다.

        myResume(); 

           if (scrUnlockReceiver != null) 

           {  

               unregisterReceiver(scrUnlockReceiver);  

               scrUnlockReceiver = null;  

           }  

       }  

   }  

}  



위와 같이 하면 종료단추를 눌러서 화면보호로 넘어간 경우 게임으로 복귀할때 보안락화면에서 게임의 배경음악이 출력되는 문제를 해결할 수 있습니다.


관련 글 : http://tjandroid.blogspot.kr/2011/10/lock-screen.html




728x90
반응형