I want download file from server, for download i use this code and write below codes:
public class MainActivity extends AppCompatActivity {
Button download;
TextView downloadCount;
ProgressBar progressBar;
Future<File> downloading;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Enable global Ion logging
Ion.getDefault(this).configure().setLogging("ion-sample", Log.DEBUG);
setContentView(R.layout.activity_main);
download = (Button) findViewById(R.id.download);
downloadCount = (TextView) findViewById(R.id.download_count);
progressBar = (ProgressBar) findViewById(R.id.progress);
File sdCard = Environment.getExternalStorageDirectory();
File dir = new File(sdCard.getAbsolutePath() + "/my app");
if (!dir.exists()) {
dir.mkdirs();
}
final File file = new File(dir, "filename.zip");
download.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (downloading != null && !downloading.isCancelled()) {
resetDownload();
return;
}
download.setText("Cancel");
// this is a 180MB zip file to test with
downloading = Ion.with(MainActivity.this)
.load("http://cdn.p30download.com/?b=p30dl-software&f=PCWinSoft.1AVMonitor.v1.9.1.50_p30download.com.rar")
.progressBar(progressBar)
.progressHandler(new ProgressCallback() {
@Override
public void onProgress(long downloaded, long total) {
downloadCount.setText("" + downloaded + " / " + total);
}
})
// write to a file
.write(file)
// run a callback on completion
.setCallback(new FutureCallback<File>() {
@Override
public void onCompleted(Exception e, File result) {
resetDownload();
if (e != null) {
Toast.makeText(MainActivity.this, "Error downloading file", Toast.LENGTH_LONG).show();
return;
}
Toast.makeText(MainActivity.this, "File upload complete", Toast.LENGTH_LONG).show();
}
});
}
});
}
void resetDownload() {
// cancel any pending download
downloading.cancel();
downloading = null;
// reset the ui
download.setText("Download");
downloadCount.setText(null);
progressBar.setProgress(0);
}
}
I want when click on download button show this download in statusBar
! But in my code just show download in progressBar
, but i want show download progress in ProgressBar
too statusBar
!
How can i it? Please help me, i really need this.
You can display a notification with the progress, by changing your code to something like:
public class MainActivity extends AppCompatActivity {
Button download;
TextView downloadCount;
ProgressBar progressBar;
// --- Add these variables
private NotificationManager mNotifyManager;
private NotificationCompat.Builder mBuilder;
// ---
Future<File> downloading;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Enable global Ion logging
Ion.getDefault(this).configure().setLogging("ion-sample", Log.DEBUG);
setContentView(R.layout.activity_main);
download = (Button) findViewById(R.id.download);
downloadCount = (TextView) findViewById(R.id.download_count);
progressBar = (ProgressBar) findViewById(R.id.progress);
File sdCard = Environment.getExternalStorageDirectory();
File dir = new File(sdCard.getAbsolutePath() + "/my app");
if (!dir.exists()) {
dir.mkdirs();
}
final File file = new File(dir, "filename.zip");
download.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (downloading != null && !downloading.isCancelled()) {
resetDownload();
return;
}
download.setText("Cancel");
// --- Initialize notification manager and the builder
mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mBuilder = new NotificationCompat.Builder(this);
mBuilder.setContentTitle("Picture Download")
.setContentText("Download in progress")
.setSmallIcon(R.drawable.ic_launcher);
// ---
// this is a 180MB zip file to test with
downloading = Ion.with(MainActivity.this)
.load("http://cdn.p30download.com/?b=p30dl-software&f=PCWinSoft.1AVMonitor.v1.9.1.50_p30download.com.rar")
.progressBar(progressBar)
.progressHandler(new ProgressCallback() {
@Override
public void onProgress(long downloaded, long total) {
downloadCount.setText("" + downloaded + " / " + total);
// --- Update the progress on the notification
mBuilder.setProgress(100, incr, false);
mNotifyManager.notify(0, mBuilder.build());
// ---
}
})
// write to a file
.write(file)
// run a callback on completion
.setCallback(new FutureCallback<File>() {
@Override
public void onCompleted(Exception e, File result) {
resetDownload();
if (e != null) {
Toast.makeText(MainActivity.this, "Error downloading file", Toast.LENGTH_LONG).show();
return;
}
Toast.makeText(MainActivity.this, "File upload complete", Toast.LENGTH_LONG).show();
}
});
});
}
});
}
void resetDownload() {
// cancel any pending download
downloading.cancel();
downloading = null;
mBuilder.setContentText("Download complete")
// Removes the progress bar
.setProgress(0, 0, false);
mNotifyManager.notify(ID, mBuilder.build());
// reset the ui
download.setText("Download");
downloadCount.setText(null);
progressBar.setProgress(0);
}
}
Read here for information about displaying progress in notification: Displaying Progress in a Notification