简体   繁体   English

Android状态栏通知和进度条

[英]Android- status bar notification with progress bar

I currently have a status bar notification that goes off when an mp3 is downloaded from a url. 我目前有一个状态栏通知,当从URL下载mp3时该通知关闭。 It launches fine (and the file does download fine), however, the progress bar doesn't progress. 它可以正常启动(并且文件确实可以正常下载),但是进度条没有进展。 It simply stays still. 它只是静止不动。 I'm not sure where to put the code so it notify's the progress of the download. 我不确定将代码放在哪里,以便它通知下载进度。 Any ideas? 有任何想法吗?

Thanks. 谢谢。

Here is part of my code: 这是我的代码的一部分:

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);
    }

}

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

This will work for you until the app is running on foreground. 这将为您工作,直到应用程序在前台运行。 If the app stops the progress bar gets stuck. 如果应用停止,进度条将卡住。 Its better to download using a service 最好使用服务下载

Try the following - 试试以下-

    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();

    }


}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM