我想在 webview 中下载文件,而不是在进度对话框中显示 activity 中的进度
I want to download files in webview with showing progress in the activity not in the progress dialogue
public class DownloadTask {
private static final String TAG = "Download Task";
private Context context;
private Button buttonText;
private String downloadUrl = "", downloadFileName = "";
public DownloadTask(Context context, Button buttonText, String downloadUrl) {
this.context = context;
this.buttonText = buttonText;
this.downloadUrl = downloadUrl;
downloadFileName = downloadUrl.replace(Utils.mainUrl, "");//Create file name by picking download file name from URL
Log.e(TAG, downloadFileName);
//Start Downloading Task
new DownloadingTask().execute();
}
private class DownloadingTask extends AsyncTask<Void, Void, Void> {
File apkStorage = null;
File outputFile = null;
@Override
protected void onPreExecute() {
super.onPreExecute();
buttonText.setEnabled(false);
buttonText.setText(R.string.downloadStarted);//Set Button Text when download started
}
@Override
protected void onPostExecute(Void result) {
try {
if (outputFile != null) {
buttonText.setEnabled(true);
buttonText.setText(R.string.downloadCompleted);//If Download completed then change button text
} else {
buttonText.setText(R.string.downloadFailed);//If download failed change button text
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
buttonText.setEnabled(true);
buttonText.setText(R.string.downloadAgain);//Change button text again after 3sec
}
}, 3000);
Log.e(TAG, "Download Failed");
}
} catch (Exception e) {
e.printStackTrace();
//Change button text if exception occurs
buttonText.setText(R.string.downloadFailed);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
buttonText.setEnabled(true);
buttonText.setText(R.string.downloadAgain);
}
}, 3000);
Log.e(TAG, "Download Failed with Exception - " + e.getLocalizedMessage());
}
super.onPostExecute(result);
}
@Override
protected Void doInBackground(Void... arg0) {
try {
URL url = new URL(downloadUrl);//Create Download URl
HttpURLConnection c = (HttpURLConnection) url.openConnection();//Open Url Connection
c.setRequestMethod("GET");//Set Request Method to "GET" since we are grtting data
c.connect();//connect the URL Connection
//If Connection response is not OK then show Logs
if (c.getResponseCode() != HttpURLConnection.HTTP_OK) {
Log.e(TAG, "Server returned HTTP " + c.getResponseCode()
+ " " + c.getResponseMessage());
}
//Get File if SD card is present
if (new CheckForSDCard().isSDCardPresent()) {
apkStorage = new File(
Environment.getExternalStorageDirectory() + "/"
+ Utils.downloadDirectory);
} else
Toast.makeText(context, "Oops!! There is no SD Card.", Toast.LENGTH_SHORT).show();
//If File is not present create directory
if (!apkStorage.exists()) {
apkStorage.mkdir();
Log.e(TAG, "Directory Created.");
}
outputFile = new File(apkStorage, downloadFileName);//Create Output file in Main File
//Create New File if not present
if (!outputFile.exists()) {
outputFile.createNewFile();
Log.e(TAG, "File Created");
}
FileOutputStream fos = new FileOutputStream(outputFile);//Get OutputStream for NewFile Location
InputStream is = c.getInputStream();//Get InputStream for connection
byte[] buffer = new byte[1024];//Set buffer type
int len1 = 0;//init length
while ((len1 = is.read(buffer)) != -1) {
fos.write(buffer, 0, len1);//Write new file
}
//Close all connection after doing task
fos.close();
is.close();
} catch (Exception e) {
//Read exception if something went wrong
e.printStackTrace();
outputFile = null;
Log.e(TAG, "Download Error Exception " + e.getMessage());
}
return null;
}
}
}
我正在使用这个我正在使用此代码下载文件,但问题是我想在 activity 不在进行中显示下载文件的进度。我已经查看了很多文章和网站,下载进度显示在 activity 中,我将把它命名为下载 activity。我可以在此 activity 中暂停、恢复和删除文件,但我没有找到任何东西。
所以请检查并为我提供解决方案,如何在不同的 activity.
中显示下载进度
使用下载侦听器在 Web 视图中下载文件并下载您的文件。
public class DownloadTask {
private static final String TAG = "Download Task";
private Context context;
private Button buttonText;
private String downloadUrl = "", downloadFileName = "";
public DownloadTask(Context context, Button buttonText, String downloadUrl) {
this.context = context;
this.buttonText = buttonText;
this.downloadUrl = downloadUrl;
downloadFileName = downloadUrl.replace(Utils.mainUrl, "");//Create file name by picking download file name from URL
Log.e(TAG, downloadFileName);
//Start Downloading Task
new DownloadingTask().execute();
}
private class DownloadingTask extends AsyncTask<Void, Void, Void> {
File apkStorage = null;
File outputFile = null;
@Override
protected void onPreExecute() {
super.onPreExecute();
buttonText.setEnabled(false);
buttonText.setText(R.string.downloadStarted);//Set Button Text when download started
}
@Override
protected void onPostExecute(Void result) {
try {
if (outputFile != null) {
buttonText.setEnabled(true);
buttonText.setText(R.string.downloadCompleted);//If Download completed then change button text
} else {
buttonText.setText(R.string.downloadFailed);//If download failed change button text
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
buttonText.setEnabled(true);
buttonText.setText(R.string.downloadAgain);//Change button text again after 3sec
}
}, 3000);
Log.e(TAG, "Download Failed");
}
} catch (Exception e) {
e.printStackTrace();
//Change button text if exception occurs
buttonText.setText(R.string.downloadFailed);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
buttonText.setEnabled(true);
buttonText.setText(R.string.downloadAgain);
}
}, 3000);
Log.e(TAG, "Download Failed with Exception - " + e.getLocalizedMessage());
}
super.onPostExecute(result);
}
@Override
protected Void doInBackground(Void... arg0) {
try {
URL url = new URL(downloadUrl);//Create Download URl
HttpURLConnection c = (HttpURLConnection) url.openConnection();//Open Url Connection
c.setRequestMethod("GET");//Set Request Method to "GET" since we are grtting data
c.connect();//connect the URL Connection
//If Connection response is not OK then show Logs
if (c.getResponseCode() != HttpURLConnection.HTTP_OK) {
Log.e(TAG, "Server returned HTTP " + c.getResponseCode()
+ " " + c.getResponseMessage());
}
//Get File if SD card is present
if (new CheckForSDCard().isSDCardPresent()) {
apkStorage = new File(
Environment.getExternalStorageDirectory() + "/"
+ Utils.downloadDirectory);
} else
Toast.makeText(context, "Oops!! There is no SD Card.", Toast.LENGTH_SHORT).show();
//If File is not present create directory
if (!apkStorage.exists()) {
apkStorage.mkdir();
Log.e(TAG, "Directory Created.");
}
outputFile = new File(apkStorage, downloadFileName);//Create Output file in Main File
//Create New File if not present
if (!outputFile.exists()) {
outputFile.createNewFile();
Log.e(TAG, "File Created");
}
FileOutputStream fos = new FileOutputStream(outputFile);//Get OutputStream for NewFile Location
InputStream is = c.getInputStream();//Get InputStream for connection
byte[] buffer = new byte[1024];//Set buffer type
int len1 = 0;//init length
while ((len1 = is.read(buffer)) != -1) {
fos.write(buffer, 0, len1);//Write new file
}
//Close all connection after doing task
fos.close();
is.close();
} catch (Exception e) {
//Read exception if something went wrong
e.printStackTrace();
outputFile = null;
Log.e(TAG, "Download Error Exception " + e.getMessage());
}
return null;
}
}
}
我正在使用这个我正在使用此代码下载文件,但问题是我想在 activity 不在进行中显示下载文件的进度。我已经查看了很多文章和网站,下载进度显示在 activity 中,我将把它命名为下载 activity。我可以在此 activity 中暂停、恢复和删除文件,但我没有找到任何东西。
所以请检查并为我提供解决方案,如何在不同的 activity.
使用下载侦听器在 Web 视图中下载文件并下载您的文件。