2

我正在使用 AsyncTask 下载文件。我在那里实现了进展:

//Updating progress dialog
protected void onProgressUpdate(Integer... changed) {
    progressDialog.setProgress(changed[0]);
}

//STARTED 
@Override
protected void onPreExecute() {

    try {
        progressDialog = new ProgressDialog(context);
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progressDialog.setMessage(context
                .getString(R.string.message_loading));
        progressDialog.setCancelable(false);
        progressDialog.show();
    } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }
}

纵向和横向一切正常。为了通知文件已下载,我正在使用界面。

所以错误是当我开始以纵向或横向下载我的文件时,虽然它没有完成,但我旋转设备然后进度消失并回调触发异常,因为无处可去。

当我旋转设备时,我的活动被重新创建,那么如何正确地做到这一点。我需要限制下载开始时用户无法旋转设备,然后如何做到这一点。

或者有解决方案吗?

4

2 回答 2

1

如果您想在下载时限制方向,那么在开始下载之前使用此代码。这将限制用户的设备方向。

int current_orientation = getResources().getConfiguration().orientation;
if (current_orientation == Configuration.ORIENTATION_LANDSCAPE) {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

您可以在完成定向后使用此代码,允许用户再次旋转设备。

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

希望它会帮助你。

于 2012-05-23T05:32:32.947 回答
1

我需要限制下载开始时用户无法旋转设备,然后如何做到这一点。

为此,在显示进度对话框之前,您需要修复设备方向。

onPreExecute(){
.....
.....
Activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
//in case activity started in landscape mode
progressDialog.show();
}

一旦你完成下载..你可以恢复到正常的方向变化。

onPostExecute(){
Activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
progressDialog.dismiss();
}

我将建议另一种解决方案.. 不要限制活动的方向,而是可以在清单文件中添加“configChanges="Orientation"" 属性,请检查 onPreExecute() 方法和 setProgress(进度)如果它不为空。

onPreExecute(){
if(progressDialog!=null){
   progressDialog.setProgress(progress);
}
else{
......
......
}
}
于 2012-05-23T05:50:14.390 回答