Progress bar in notification bar when uploading image?

前端 未结 6 1976
借酒劲吻你
借酒劲吻你 2020-12-05 02:07

I\'d like my app to upload an image to a web server. That part works.

I\'m wondering if it\'s possible to somehow show the progress of the upload by entering an entr

相关标签:
6条回答
  • 2020-12-05 02:28

    You this library and enjoy..! check example for more details..

    0 讨论(0)
  • 2020-12-05 02:29

    In Android, in order to display a progress bar in a Notification, you just need to initialize setProgress(...) into the Notification.Builder.

    Note that, in your case, you would probably want to use even the setOngoing(true) flag.

    Integer notificationID = 100;
    
    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    
    //Set notification information:
    Notification.Builder notificationBuilder = new Notification.Builder(getApplicationContext());
    notificationBuilder.setOngoing(true)
                       .setContentTitle("Notification Content Title")
                       .setContentText("Notification Content Text")
                       .setProgress(100, 0, false);
    
    //Send the notification:
    Notification notification = notificationBuilder.build();
    notificationManager.notify(notificationID, notification);
    

    Then, your Service will have to notify the progress. Assuming that you store your (percentage) progress into an Integer called progress (e.g. progress = 10):

    //Update notification information:
    notificationBuilder.setProgress(100, progress, false);
    
    //Send the notification:
    notification = notificationBuilder.build();
    notificationManager.notify(notificationID, notification);
    

    You can find more information on the API Notifications page: http://developer.android.com/guide/topics/ui/notifiers/notifications.html#Progress

    0 讨论(0)
  • 2020-12-05 02:31

    You can try out this class it will help you to generate notification

    public class FileUploadNotification {
    public static NotificationManager mNotificationManager;
    static NotificationCompat.Builder builder;
    static Context context;
    static int NOTIFICATION_ID = 111;
    static FileUploadNotification fileUploadNotification;
    
    /*public static FileUploadNotification createInsance(Context context) {
        if(fileUploadNotification == null)
            fileUploadNotification = new FileUploadNotification(context);
    
        return fileUploadNotification;
    }*/
    public FileUploadNotification(Context context) {
        mNotificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
        builder = new NotificationCompat.Builder(context);
        builder.setContentTitle("start uploading...")
                .setContentText("file name")
                .setSmallIcon(android.R.drawable.stat_sys_upload)
                .setProgress(100, 0, false)
                .setAutoCancel(false);
    }
    
    public static void updateNotification(String percent, String fileName, String contentText) {
        try {
            builder.setContentText(contentText)
                    .setContentTitle(fileName)
                    //.setSmallIcon(android.R.drawable.stat_sys_download)
                    .setOngoing(true)
                    .setContentInfo(percent + "%")
                    .setProgress(100, Integer.parseInt(percent), false);
    
            mNotificationManager.notify(NOTIFICATION_ID, builder.build());
            if (Integer.parseInt(percent) == 100)
                deleteNotification();
    
        } catch (Exception e) {
            // TODO Auto-generated catch block
            Log.e("Error...Notification.", e.getMessage() + ".....");
            e.printStackTrace();
        }
    }
    
    public static void failUploadNotification(/*int percentage, String fileName*/) {
        Log.e("downloadsize", "failed notification...");
    
        if (builder != null) {
           /* if (percentage < 100) {*/
            builder.setContentText("Uploading Failed")
                    //.setContentTitle(fileName)
                    .setSmallIcon(android.R.drawable.stat_sys_upload_done)
                    .setOngoing(false);
            mNotificationManager.notify(NOTIFICATION_ID, builder.build());
            /*} else {
                mNotificationManager.cancel(NOTIFICATION_ID);
                builder = null;
            }*/
        } else {
            mNotificationManager.cancel(NOTIFICATION_ID);
        }
    }
    
    public static void deleteNotification() {
        mNotificationManager.cancel(NOTIFICATION_ID);
        builder = null;
    }
    }
    
    0 讨论(0)
  • 2020-12-05 02:34

    You can design a custom notification, instead of just the default notification view of header and sub-header.

    What you want is here

    0 讨论(0)
  • 2020-12-05 02:36
    public class loadVideo extends AsyncTask<Void, Integer, Void> {
    
            int progress = 0;
            Notification notification;
            NotificationManager notificationManager;
            int id = 10;
    
            protected void onPreExecute() {
    
            }
    
            @Override
            protected Void doInBackground(Void... params) {
                HttpURLConnection conn = null;
                DataOutputStream dos = null;
                DataInputStream inStream = null;
                String lineEnd = "\r\n";
                String twoHyphens = "--";
                String boundary = "*****";
                int bytesRead;
                int sentData = 0;               
                byte[] buffer;
                String urlString = "http://xxxxx/xxx/xxxxxx.php";
                try {
                    UUID uniqueKey = UUID.randomUUID();
                    fname = uniqueKey.toString();
                    Log.e("UNIQUE NAME", fname);
                    FileInputStream fileInputStream = new FileInputStream(new File(
                            selectedPath));
                    int length = fileInputStream.available();
                    URL url = new URL(urlString);
                    conn = (HttpURLConnection) url.openConnection();
                    conn.setDoInput(true);
                    conn.setDoOutput(true);
                    conn.setUseCaches(false);
                    conn.setRequestMethod("POST");
                    conn.setRequestProperty("Connection", "Keep-Alive");
                    conn.setRequestProperty("Content-Type",
                            "multipart/form-data;boundary=" + boundary);
                    dos = new DataOutputStream(conn.getOutputStream());
                    dos.writeBytes(twoHyphens + boundary + lineEnd);
                    dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\""
                            + fname + "" + lineEnd);
                    dos.writeBytes(lineEnd);
                    buffer = new byte[8192];
                    bytesRead = 0;
                    while ((bytesRead = fileInputStream.read(buffer)) > 0) {
                        dos.write(buffer, 0, bytesRead);
                        sentData += bytesRead;
                        int progress = (int) ((sentData / (float) length) * 100);
                        publishProgress(progress);
                    }
                    dos.writeBytes(lineEnd);
                    dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
                    Log.e("Debug", "File is written");
                    fileInputStream.close();
                    dos.flush();
                    dos.close();
    
                } catch (MalformedURLException ex) {
                    Log.e("Debug", "error: " + ex.getMessage(), ex);
                } catch (IOException ioe) {
                    Log.e("Debug", "error: " + ioe.getMessage(), ioe);
                }
                // ------------------ read the SERVER RESPONSE
                try {
                    inStream = new DataInputStream(conn.getInputStream());
                    String str;
                    while ((str = inStream.readLine()) != null) {
                        Log.e("Debug", "Server Response " + str);
                    }
                    inStream.close();
    
                } catch (IOException ioex) {
                    Log.e("Debug", "error: " + ioex.getMessage(), ioex);
                }
    
                return null;
            }
    
            @Override
            protected void onProgressUpdate(Integer... progress) {
    
                Intent intent = new Intent();
                final PendingIntent pendingIntent = PendingIntent.getActivity(
                        getApplicationContext(), 0, intent, 0);
                notification = new Notification(R.drawable.video_upload,
                        "Uploading file", System.currentTimeMillis());
                notification.flags = notification.flags
                        | Notification.FLAG_ONGOING_EVENT;
                notification.contentView = new RemoteViews(getApplicationContext()
                        .getPackageName(), R.layout.upload_progress_bar);
                notification.contentIntent = pendingIntent;
                notification.contentView.setImageViewResource(R.id.status_icon,
                        R.drawable.video_upload);
                notification.contentView.setTextViewText(R.id.status_text,
                        "Uploading...");
                notification.contentView.setProgressBar(R.id.progressBar1, 100,
                        progress[0], false);
                getApplicationContext();
                notificationManager = (NotificationManager) getApplicationContext()
                        .getSystemService(Context.NOTIFICATION_SERVICE);
                notificationManager.notify(id, notification);
            }
    
            protected void onPostExecute(Void result) {
                Notification notification = new Notification();
                Intent intent1 = new Intent(MultiThreadActivity.this,
                        MultiThreadActivity.class);
                final PendingIntent pendingIntent = PendingIntent.getActivity(
                        getApplicationContext(), 0, intent1, 0);
                int icon = R.drawable.check_16; // icon from resources
                CharSequence tickerText = "Video Uploaded Successfully"; // ticker-text
                CharSequence contentTitle = getResources().getString(
                        R.string.app_name); // expanded message
                // title
                CharSequence contentText = "Video Uploaded Successfully"; // expanded
                                                                            // message
                long when = System.currentTimeMillis(); // notification time
                Context context = getApplicationContext(); // application
                                                            // Context
                notification = new Notification(icon, tickerText, when);
                notification.flags |= Notification.FLAG_AUTO_CANCEL;
                notification.setLatestEventInfo(context, contentTitle, contentText,
                        pendingIntent);
                String notificationService = Context.NOTIFICATION_SERVICE;
                notificationManager = (NotificationManager) context
                        .getSystemService(notificationService);
                notificationManager.notify(id, notification);
            }
        }
    

    check this if it can help u

    0 讨论(0)
  • 2020-12-05 02:39

    I'm not a Facebook user, so I do not know exactly what you're seeing.

    It is certainly possible to keep updating a Notification, changing the icon to reflect completed progress. As you suspect, you would do this from a Service with a background thread that is managing the upload.

    0 讨论(0)
提交回复
热议问题