Как предотвратить крах моего приложения для Android при изменении ориентации экрана на экране блокировки?

Я нашел эту проблему недавно. Для тестов я использую Samsung Tab 7 дюймов с Android 4.1.

У меня есть новый проект приложения для Android. Здесь у нас есть трэш.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" /> 
</RelativeLayout>

И Активность, которая его вызывает:

package com.example.trash;

import android.os.Bundle;
import android.app.Activity;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.trash);
}

}

Пока довольно просто. Затем я помещаю этот код на вкладку MainActivity в AndroidManifest:

android:screenOrientation="portrait"

Проблема появилась, когда я: 1. заблокировал экран 2. изменил ориентацию планшета на альбомную 3. затем разблокировал экран 4. и, к моему удивлению, вместо того, чтобы вернуться к портретной ориентации, мое приложение просто рухнуло из-за простой ошибки ( Ресурсы$NotFoundException):

06-15 00:12:37.390: E/AndroidRuntime(6452): java.lang.RuntimeException: Unable to start         activity ComponentInfo{com.example.trash/com.example.trash.MainActivity}: android.content.res.Resources$NotFoundException: Resource ID #0x7f030001

Что я могу сделать, чтобы избежать этой проблемы, вместо того, чтобы делать альбомную верстку для моего приложения?


person Artenes Nogueira    schedule 15.06.2013    source источник


Ответы (2)


Вы можете попробовать вызвать setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); в своих действиях onCreate()

person Jordan B.    schedule 15.06.2013

1 Ваш проект должен быть нацелен на версию 3.0 или выше;

2 На вкладке активности (в манифесте Android) вы должны добавить эти две строки:

android:screenOrientation="portrait" or android:screenOrientation="landscape"
android:configChanges="orientation|screenSize"

3 В свой класс Activity добавьте следующий метод:

@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  
}   

Это работает так. Добавление configChanges на вкладку «Активность» приведет к тому, что метод onConfigurationChanged будет вызываться каждый раз, когда экран переключается между альбомной и вертикальной ориентацией и наоборот. Затем в методе мы используем setRequestOrientation, чтобы заставить Activity оставаться в определенной ориентации.

person Artenes Nogueira    schedule 08.03.2017