带状态栏的Android状态栏通知

时间:2011-07-28 21:26:24

标签: android notifications progress-bar download statusbar

我目前有一个状态栏通知,当从网址下载mp3时,该通知会消失。它启动正常(文件确实下载正常),但进度条没有进展。它只是保持不动。我不知道在哪里放置代码,以便通知下载的进度。有什么想法吗?

感谢。

以下是我的代码的一部分:

public class DownloadFile extends AsyncTask<String, Integer, String>{
        @Override
        protected String doInBackground(String... url) {
            try {
                URL url2 = new URL(sdrUrl);
                HttpURLConnection c = (HttpURLConnection) url2.openConnection();
                c.setRequestMethod("GET");
                c.setDoOutput(true);
                c.connect();

                int lengthOfFile = c.getContentLength();

                String PATH = Environment.getExternalStorageDirectory()
                        + "/download/";
                Log.v("", "PATH: " + PATH);
                File file = new File(PATH);
                file.mkdirs();

                String [] path = url2.getPath().split("/");
                String mp3 = path [path.length-1];
                String sdrMp3 = mp3.replace("%20", "");

                File outputFile = new File(file, sdrMp3);
                FileOutputStream fos = new FileOutputStream(outputFile);

                InputStream is = c.getInputStream();

                byte[] buffer = new byte[1024];
                int len1 = 0;
                while ((len1 = is.read(buffer)) != -1) {
                    publishProgress((int)(len1*100/lengthOfFile));
                    fos.write(buffer, 0, len1);
                }
                fos.close();
                is.close();

                }catch (IOException e) {
                       e.printStackTrace();
                }


            return null;
        }

        @Override
        public void onProgressUpdate(Integer... values) {


            super.onProgressUpdate(values);
        }



    }

    public void DownloadNotification(){

        Intent intent = new Intent(this, BlogActivity.class);
        final PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);

        final Notification notification = new Notification(R.drawable.sdricontest, "Downloading...", System
               .currentTimeMillis());
        notification.flags = notification.flags | Notification.FLAG_ONGOING_EVENT;
        notification.contentView = new RemoteViews(getApplicationContext().getPackageName(), R.layout.notification_layout);
        notification.contentIntent = pendingIntent;
        notification.contentView.setImageViewResource(R.id.download_icon, R.drawable.sdricontest);
        notification.contentView.setTextViewText(R.id.download_text, "simulation in progress");
        notification.contentView.setProgressBar(R.id.download_progress, 100, progress, false);

        getApplicationContext();
        final NotificationManager notificationManager = (NotificationManager) getApplicationContext().getSystemService(
                Context.NOTIFICATION_SERVICE);
        notificationManager.notify(42, notification);
    }

}

2 个答案:

答案 0 :(得分:0)

http://developer.android.com/training/notify-user/display-progress.html

这将适用于您,直到应用程序在前台运行。如果应用程序停止,进度条会卡住。最好使用服务下载

答案 1 :(得分:-1)

尝试以下方法 -

    public class DownloadFile extends AsyncTask<String, Integer, String>{
    ProgressDialog pd;

    public DownloadFile() {
    super();
    pd = ProgressDialog.show(context, "Loading..", "Doing Stuff", true,false);
    }

    @Override
    protected String doInBackground(String... url) {
        //stuff
    }


    @Override
    protected void onPostExecute (Boolean result){

    pd.dismiss();

    }


}