Экран блокировки Android Cocos2d или перезапуск игровых сил
Я нахожусь на последней стадии игры Cocos2d для Android, и у меня возникла проблема, которую я не могу решить.
Когда я блокирую свой планшет (Nexus 7) или когда я нажимаю кнопку "Домой", чтобы выйти из игры, он перезагружается. Он возвращается прямо к заставке, как будто игра открывается снова и снова. Для справки, вот моя основная активность и мой манифест Android:
public class MainActivity extends Activity {
//To get a static reference to context for shared preferences
private static Context context;
protected CCGLSurfaceView _glSurfaceView;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//To get a static reference to context for shared preferences
MainActivity.context = getApplicationContext();
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
_glSurfaceView = new CCGLSurfaceView(this);
setContentView(_glSurfaceView);
}
//To get a static reference to context for shared preferences
public static Context getAppContext(){
return MainActivity.context;
}
@Override
public void onStart()
{
super.onStart();
CCDirector.sharedDirector().attachInView(_glSurfaceView);
CCDirector.sharedDirector().setDeviceOrientation(CCDirector.kCCDeviceOrientationPortrait);
CCDirector.sharedDirector().setDisplayFPS(true);
CCDirector.sharedDirector().setAnimationInterval(1.0f / 60.0f);
CCScene scene = Splash.scene();
CCDirector.sharedDirector().runWithScene(scene);
}
@Override
public void onPause()
{
super.onPause();
CCDirector.sharedDirector().pause();
SoundEngine.sharedEngine().pauseSound();
}
@Override
public void onResume()
{
super.onResume();
CCDirector.sharedDirector().resume();
SoundEngine.sharedEngine().resumeSound();
}
@Override
public void onStop()
{
super.onStop();
SoundEngine.sharedEngine().pauseSound();
}
а также
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="bigfiresoftware.alphadefender"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="16" />
<application
android:allowBackup="true"
android:icon="@drawable/adicon"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name="bigfiresoftware.alphadefender.MainActivity"
android:screenOrientation="portrait"
android:label="@string/app_name"
android:hardwareAccelerated="false">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
android:configChanges="keyboard|keyboardHidden|orientation"
</manifest>
Любая / вся помощь очень ценится. Благодарю.
3 ответа
Добавьте строку ниже в вашем файле манифеста к вашей деятельности.
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
Когда вы заблокировали экран, ориентация вашего экрана меняется. Так что ваша деятельность разрушается и снова создается. Если вы добавите эту строку, ваша ориентация не изменится.
Ответы выше не помогли, но я наконец нашел ответ. Это было сложно.
Если кто-то еще обнаружит эту проблему:
Удалите targetSdkVersion в AdnroidManifest.xml. Или поменяйте на других, я не пробовал других, но удаление работало.
android:minSdkVersion="9"
android:targetSdkVersion="17" /> //git rid of this guy
Добавьте эту строку в ваш метод onstop()
CCDirector.sharedDirector().end();
и вам нужно написать метод onDestroy() для удаления всех случаев, когда вы закрываете игру.