0

我目前在我的异步任务中遇到问题。当进度条开始并且我旋转屏幕时,进度条消失并且活动重新开始。我正在尝试使用

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

但是如果我的 AsyncTask 不在我的活动中怎么办......它在许多活动类共有的另一个类文件中。那我怎样才能得到 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); 感谢任何会提供帮助的人。

4

2 回答 2

0

这适用于我的应用程序。我把这一行放在清单中。

**android:configChanges="orientation|screenSize"**
于 2013-09-03T00:02:49.433 回答
0

这是我对这个问题的解决方案:

@Override
protected void onPreExecute() {
    Device.lockOrientation((Activity)context);
    ...
}

@Override
protected void onPostExecute(List<Hydrant> hydrants) {
    Device.releaseOrientation((Activity)context);
    ...
}

设备实现:

public class Device {

    public static void lockOrientation(Activity activity) {
        Display display = ((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
        int rotation = display.getRotation();
        int tempOrientation = activity.getResources().getConfiguration().orientation;
        int orientation = 0;
        switch(tempOrientation)
        {
        case Configuration.ORIENTATION_LANDSCAPE:
            if(rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90)
                orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
            else
                orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
            break;
        case Configuration.ORIENTATION_PORTRAIT:
            if(rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_270)
                orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
            else
                orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
        }
        activity.setRequestedOrientation(orientation);
    }

    public static void releaseOrientation(Activity activity) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
    }

}

由于 AsyncTasks 只打算运行几秒钟,这对我来说是一个可以接受的解决方案,因为这很少会影响用户。尤其是像 ProgressDialog 这样的东西,可以很好地表明她必须等待多长时间。

于 2013-09-26T22:52:02.357 回答