Java 关于旋转机器人的进展

Java 关于旋转机器人的进展,java,android,Java,Android,我正在使用AsyncTask下载文件。在那里,我实施了以下进展: //Updating progress dialog protected void onProgressUpdate(Integer... changed) { progressDialog.setProgress(changed[0]); } //STARTED @Override protected void onPreExecute() { try { progressDialog =

我正在使用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();
    }
}
肖像画和风景画都很好。对于文件已下载的通知,我正在使用接口

所以错误的是,当我开始在纵向或横向下载我的文件,而它并没有完成,我旋转设备,然后进程消失,并回调火灾异常,因为并没有地方去

当我旋转设备时,我的活动被重新创建,所以如何正确地执行此操作。我需要限制,当下载开始时,用户不能旋转设备,然后如何做到这一点


还是有解决办法

如果要在下载时限制方向,请在开始下载之前使用此代码。这将限制用户的设备定位

int current_orientation = getResources().getConfiguration().orientation;
if (current_orientation == Configuration.ORIENTATION_LANDSCAPE) {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
onPreExecute(){
.....
.....
Activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
//in case activity started in landscape mode
progressDialog.show();
}
此代码可以在完成定向后使用,允许用户再次旋转设备

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
希望它能帮助你

我需要限制,当下载开始时,用户不能 旋转设备,然后如何操作

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

int current_orientation = getResources().getConfiguration().orientation;
if (current_orientation == Configuration.ORIENTATION_LANDSCAPE) {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
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”属性,并请检查progressDialog对象是否存在!onPreExecute()方法中为null,如果不为null,则为setProgress(progress)

onPreExecute(){
if(progressDialog!=null){
   progressDialog.setProgress(progress);
}
else{
......
......
}
}

如何在扩展AsyncTask的类中设置RequestedOrientation?请使用context.setRequestedOrientation。其中context是显示对话框的活动的上下文。我尝试过,但不起作用。编译器建议强制转换,当它仍然显示erroruse上下文时。getResources().getConfiguration().orientation;它会给你定位。您需要设置的方向相同。这起作用((活动)上下文)。谢谢你抽出时间。在android上处理轮换是一项非常艰巨的工作,因为它会重新创建所有内容。请将android:configChanges=“orientation”放在该活动的清单文件中