简体   繁体   中英

How to show download in statusBar in Android

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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