上传图片时通知栏中的进度条?

我想我的应用程序上传图像到Web服务器。 那部分工作。

我想知道是否有可能通过在“通知栏”中input条目以某种方式显示上载的进度。 我看到Facebook应用程序这样做。

当您拍照并select上传时,应用程序可让您继续,并以某种方式将图片上传通知放入通知栏的进度条中。 我觉得这很漂亮 我想他们产生了一个新的服务或东西来处理上传和每隔一段时间更新通知栏中的进度条。

感谢您的任何想法

Solutions Collecting From Web of "上传图片时通知栏中的进度条?"

您可以devise自定义通知,而不仅仅是标题和子标题的默认通知视图。

你想在这里: http : //developer.android.com/guide/topics/ui/notifiers/notifications.html#CustomExpandedView

在Android中,为了在通知中显示进度条,您只需要将setProgress(…)初始化为Notification.Builder 。

请注意,在你的情况下,你甚至可能想使用setOngoing(true)标志。

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

然后,您的服务将不得不通知进度。 假设你将你的(百分比)进度存储到一个称为进度Integer中 (例如progress = 10 ):

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

您可以在API通知页面find更多信息: http : //developer.android.com/guide/topics/ui/notifiers/notifications.html#Progress

我不是Facebook用户,所以我不确切知道你在看什么。

当然可以继续更新Notification ,改变图标以反映完成的进度。 正如你怀疑的那样,你可以通过后台线程来pipe理上传。

你可以尝试这个类,它会帮助你生成通知

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

你这个图书馆,享受..! 检查例子的更多细节..

public class loadVideo extends AsyncTask {

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

检查这是否可以帮助你