android - 设备锁定时强制关闭,旋转并再次解锁

标签 android

我正在开发一款平板电脑应用。一切正常,直到设备被锁定。一旦设备被锁定并旋转,就会出现强制关闭。

我强制我的应用仅在 LANDSCAPE 模式下运行。所以我在 list 中提到了这个权限。

 <activity
            android:name=".activity.LoginActivity"
            android:screenOrientation="landscape"
            android:windowSoftInputMode="adjustPan" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

因此,当我锁定我的设备并旋转时,方向会发生变化,并且会产生关闭力。

为了解决这个问题,我在 list 中添加了这个权限。

android:configChanges="orientation"

在代码中:

 @Override
    public void onConfigurationChanged(Configuration newConfig) {
        // TODO Auto-generated method stub
        super.onConfigurationChanged(newConfig);
        Log.i("Log", "Configuration changes called");
        int orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
        // or = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
        setRequestedOrientation(orientation);
    }

我还在 onCreate()

中添加了这一行
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.i("Log", "OnCreate");
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        setContentView(R.layout.lyt_login_main);
                ........
                }

但仍未得到解决。请帮我解决这个问题。

这是我遇到的错误:

12-17 11:13:57.877: E/AndroidRuntime(10462): FATAL EXCEPTION: main
12-17 11:13:57.877: E/AndroidRuntime(10462): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.marico.icp/com.marico.icp.activity.LoginActivity}: android.content.res.Resources$NotFoundException: Resource ID #0x7f03000f
12-17 11:13:57.877: E/AndroidRuntime(10462):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1970)
12-17 11:13:57.877: E/AndroidRuntime(10462):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995)
12-17 11:13:57.877: E/AndroidRuntime(10462):    at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3365)
12-17 11:13:57.877: E/AndroidRuntime(10462):    at android.app.ActivityThread.access$700(ActivityThread.java:128)
12-17 11:13:57.877: E/AndroidRuntime(10462):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1165)
12-17 11:13:57.877: E/AndroidRuntime(10462):    at android.os.Handler.dispatchMessage(Handler.java:99)
12-17 11:13:57.877: E/AndroidRuntime(10462):    at android.os.Looper.loop(Looper.java:137)
12-17 11:13:57.877: E/AndroidRuntime(10462):    at android.app.ActivityThread.main(ActivityThread.java:4514)
12-17 11:13:57.877: E/AndroidRuntime(10462):    at java.lang.reflect.Method.invokeNative(Native Method)
12-17 11:13:57.877: E/AndroidRuntime(10462):    at java.lang.reflect.Method.invoke(Method.java:511)
12-17 11:13:57.877: E/AndroidRuntime(10462):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
12-17 11:13:57.877: E/AndroidRuntime(10462):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
12-17 11:13:57.877: E/AndroidRuntime(10462):    at dalvik.system.NativeStart.main(Native Method)
12-17 11:13:57.877: E/AndroidRuntime(10462): Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f03000f
12-17 11:13:57.877: E/AndroidRuntime(10462):    at android.content.res.Resources.getValue(Resources.java:1037)
12-17 11:13:57.877: E/AndroidRuntime(10462):    at android.content.res.Resources.loadXmlResourceParser(Resources.java:2144)
12-17 11:13:57.877: E/AndroidRuntime(10462):    at android.content.res.Resources.getLayout(Resources.java:870)
12-17 11:13:57.877: E/AndroidRuntime(10462):    at android.view.LayoutInflater.inflate(LayoutInflater.java:394)
12-17 11:13:57.877: E/AndroidRuntime(10462):    at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
12-17 11:13:57.877: E/AndroidRuntime(10462):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:273)
12-17 11:13:57.877: E/AndroidRuntime(10462):    at android.app.Activity.setContentView(Activity.java:1835)
12-17 11:13:57.877: E/AndroidRuntime(10462):    at com.marico.icp.activity.LoginActivity.onCreate(LoginActivity.java:77)
12-17 11:13:57.877: E/AndroidRuntime(10462):    at android.app.Activity.performCreate(Activity.java:4465)
12-17 11:13:57.877: E/AndroidRuntime(10462):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1053)
12-17 11:13:57.877: E/AndroidRuntime(10462):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1934)
12-17 11:13:57.877: E/AndroidRuntime(10462):    ... 12 more

提前致谢。

最佳答案

正如@kumar 在评论中所说,

我将布局文件夹中的所有布局都保留在 layout-large-land 中,将 list 权限更改为 android:configChanges="orientation"android:configChanges="orientation|keyboardHidden"

注释了这个方法onConfigurationChanged(),也注释了这一行setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

然后我运行代码。 这解决了强制关闭的问题,但是由于方向改变,调用了 onCreate() 方法并且我将输入的数据丢失到 editText 中,

为此,我覆盖 onSaveInstanceState(Bundle outState) 方法到我的 Activity 类。并做了以下操作。

我在 hashmap 中保存输入的数据,所以在 onSavedInstanceState() 中,我这样做了。

@Override
    protected void onSaveInstanceState(Bundle outState) {

        outState.putSerializable("hashMap", hashMapSaveToDB);
        super.onSaveInstanceState(outState);

    }

然后在 onCreate() 中像这样检查 savedInstanceState...

if(savedInstanceState != null)
        {
            hashMapSaveToDB = (HashMap<String, ArrayList<String>>) savedInstanceState.getSerializable("hashMap"); 
        }

这解决了调用 onCreate() 时数据丢失的问题。

感谢@kumar

关于android - 设备锁定时强制关闭,旋转并再次解锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13909038/

相关文章:

Android 原生音乐播放器搜索 Intent

java - 拖放到 `ListView`

java - 如何用 org.apache.commons.codec.binary.Base64 替换 android.util.Base64?

android-MNC 项目不会在 API 级别 'android-MNC' 之前的设备上运行

android - android singleTask Activity 不作为root?

android - 如何在启动新 Activity 时显示 ProgressDialog?

Android 优雅地管理来自 Activity 的 fragment

android - 使 recyclerview 选择跟踪器的选择模式仅在长按时激活

java - Android Studio - 将用户信息保存在 CSV 文件中并读取

Android:IntentService:如何:将回调从 Activity 传递到 IntentService?