我正在使用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();
}
}
在肖像和风景中,一切都很好。对于下载文件的通知,我正在使用界面。
错误的是,当我开始以纵向或横向方式下载文件时,如果没有完成,我会旋转设备,然后进度消失,回调引发异常,因为无处可去。
当我旋转设备时,我的活动被重新创建,所以如何正确地执行此操作。我需要限制,当下载开始时,用户无法旋转设备,那么如何做到这一点。
或者有解决方案吗?
答案 0 :(得分: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);
希望它会对你有所帮助。
答案 1 :(得分: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()方法中检查!null的progressDialog对象,如果非空,请检查setProgress(progress)。 / p>
onPreExecute(){
if(progressDialog!=null){
progressDialog.setProgress(progress);
}
else{
......
......
}
}