开发者

Updating progressbar from IntentService?

I'm trying to update the progressbar which is integrated in my notification bar but I can't seem to get it working. I kind of have the idea why it is not working but I have no idea of how to solve it. this is the code:

public class DownloadService extends IntentService{

     public DownloadService() {
        super("DownloadService");


    }

       @Override
       public void onCreate() {
           super.onCreate();
           ctx = getApplicationContext();
           root = new File(Environment.getExternalStorageDirectory()+"/folder-videos/");
           if(root.exists() && root.isDirectory()) {

           }else{
               root.mkdir();
           }          
           notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVI开发者_如何学GoCE);
           PendingIntent contentIntent = PendingIntent.getActivity(this, 0, null, 0);

           notification = new Notification(R.drawable.icon, "App", System.currentTimeMillis());
           contentView = new RemoteViews(getPackageName(), R.layout.progress_layout);
           notification.flags = Notification.FLAG_AUTO_CANCEL;
           notification.contentView = contentView;
           notification.contentIntent = contentIntent;
           contentView.setProgressBar(R.id.status_progress, 100, 0, false);        
           contentView.setTextViewText(R.id.status_text,"Downloading...");  

       }

        @Override
    protected void onHandleIntent(Intent intent) {
        Intent broadcastIntent = new Intent();

        int count;
        String full_url = URL + intent.getStringExtra(VIDEOS);

        try {
            URL url = new URL(full_url);
            URLConnection conexion = url.openConnection();
            conexion.connect();
            File file = new File(root.getPath(), intent.getStringExtra(VIDEOS));

            int lenghtOfFile = conexion.getContentLength();
            Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile);

            InputStream input = new BufferedInputStream(url.openStream());
            OutputStream output = new FileOutputStream(file);

            byte data[] = new byte[1024];

            long total = 0;
            contentView.setTextViewText(R.id.status_text,"Downloading " + intent.getStringExtra(VIDEOS));  
            while ((count = input.read(data)) > 0) {
               total += count;      
               notification.contentView.setProgressBar(R.id.status_progress, 100,(int)((total*100)/lenghtOfFile), false);       
               Log.e("totaltotal","" + (int)((total*100)/lenghtOfFile));
               output.write(data, 0, count);


            } 
            notificationManager.notify(1,notification);
            output.flush();
            output.close();
            input.close();
        } catch (Exception e) {
            Log.e("PRINTSTACK","STACK:" + e.getMessage());
            e.printStackTrace();
        }

    }
}

I know I have to call : notificationManager.notify(1,notification); within the while loop and I've tried but it freezes the app and crashes it. Is there any other way to notify the notification manager of the progressbar updates.

Thanks!!


try to use notificationManager.notify(1,notification); only a few times

as in :

int lastProgressUpdate=0;
while(...)
{
    if(progress%5==0 && progress!=lastProgressUpdate)
    {

         notificationManager.notify(1,notification);
         lastProgressUpdate=progress;
    }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜