i try to put the progress bar into the notification. but the problem is the system will not respond for few seconds and progress bar stuck at beginning once it's started, please take note that even the progress bar is get stuck-ed but the file is still downloading.
Below is the code, please guide me how to deal with the progress bar.
public class StaffChoice extends Activity {
public static final int DIALOG_DOWNLOAD_PROGRESS = 0;
ProgressBar progressBar;
private int progress = 10;
Intent MyI;
PendingIntent MyPI;
NotificationManager MyNM;
Notification notification;
NotificationManager notificationManager;
private void startDownload() {
String url = "http://www.domainurl.com/3d.png"; //this is not a valid url
DownloadFileAsync dfa = new DownloadFileAsync();
dfa.setActivity(StaffChoice.this);
dfa.execute(url);
}
public void onTaskCompleted() {
dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.staffchoices);
MyI = new Intent(getApplicationContext(), MaxAppsAct.class);
MyPI = PendingIntent.getActivity(getApplicationContext(), 0, MyI, 0);
MyNM = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
Intent intent = new Intent(this, StaffChoice.class);
final PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);
notification = new Notification(R.drawable.logo, "Downloading...", System.currentTimeMillis());
notification.flags = notification.flags | Notification.FLAG_ONGOING_EVENT;
notification.contentView = new RemoteViews(getApplicationContext().getPackageName(), R.layout.staffchoices);
notification.contentIntent = pendingIntent;
notification.contentView.setImageViewResource(R.id.imgIcon, R.drawable.save);
notification.contentView.setTextViewText(R.id.tvText, "Downloading...");
notification.contentView.setProgressBar(R.id.pbStatus, 100, progress, false);
notificationManager = (NotificationManager) getApplicationContext().getSystemService(getApplicationContext().NOTIFICATION_SERVICE);
notificationManager.notify(42, notification);
startDownload();
}
public class DownloadFileAsync extends AsyncTask<String, String, String> {
StaffChoice activity;
private boolean completed;
@Override
protected void onPreExecute() {
super.onPreExecute();
showDialog(DIALOG_DOWNLOAD_PROGRESS);
}
@Override
protected String doInBackground(String... aurl) {
int count;
try {
URL url = new URL(aurl[0]);
URLConnection conexion = url.openConnection();
conexion.connect();
int lenghtOfFile = conexion.getContentLength();
Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile);
File folder = new File(Environment.getExternalStorageDirectory() + "/MaxApps");
boolean success = false;
if (!folder.exists()) {
success = folder.mkdirs();
}
if (!success) {
} else {
}
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream("/sdcard/MaxApps/3d.png");
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
publishProgress(""+(int)((total*100)/lenghtOfFile));
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
} catch (Exception e) {}
return null;
}
protected void onProgressUpdate(Integer... progress) {
notification.contentView.setProgressBar(R.id.pbStatus, 100, progress[0], false);
notificationManager.notify(42, notification);
}
@Override
protected void onPostExecute(String unused) {
completed = true;
notifyActivityTaskCompleted();
}
public void setActivity(StaffChoice activity){
this.activity = activity;
if (completed) {
notifyActivityTaskCompleted();
}
}
private void notifyActivityTaskCompleted() {
if (null != activity) {
activity.onTaskCompleted();
}
}
}
}