2009-12-09 2 views
28

Я хочу, чтобы мое приложение загрузило изображение на веб-сервер. Эта часть работает.Индикатор выполнения в панели уведомлений при загрузке изображения?

Мне интересно, возможно ли каким-либо образом показать ход загрузки, введя запись в «панели уведомлений». Я вижу, что приложение Facebook делает это.

Когда вы делаете снимок и выбираете загрузку, приложение позволяет продолжить и каким-то образом помещает уведомления о загрузке изображения в индикатор выполнения на панели уведомлений. Я думаю, это довольно пятно. Я предполагаю, что они порождают новую услугу или что-то, чтобы обрабатывать загрузку и обновлять этот индикатор выполнения в панели уведомлений так часто.

Спасибо за любые идеи

+2

http://united-coders.com/nico-heid/show-progressbar-in- уведомление-area-like-google-does-when-downloading-from-android Я следил за этим, отлично работал – morty346

+0

[Отображение прогресса в уведомлении] (http://developer.android.com/guide/topics/ui/notifiers/notifications .html # Progress) для всех, кто находит это ... – aecl755

ответ

16

Вы можете создать собственное уведомление, а не только уведомление по умолчанию заголовка и подзаголовка.

Что вы хотите here

2

Я не пользователь Facebook, так что я не знаю точно, что вы видите.

Конечно, можно продолжать обновление Notification, изменив значок, чтобы отразить завершенный прогресс. Как вы подозреваете, вы сделали бы это с Service с фоновым потоком, который управляет загрузкой.

+0

Согласен, мне кажется, мне интересно, какой API они использовали, чтобы поместить свой индикатор выполнения в панель уведомлений - панель глобального интерфейса вы можете скользить пальцем, что показывает скорость загрузки с рынка и т. Д. Кажется, что панель является внешней к приложению, но они могут поставить свой индикатор прогресса там? Спасибо – Mark

+0

Ну, вот как работают уведомления ... вы отправляете их с помощью службы платформ уведомлений, и они появятся на этой панели. Как сказал Клондайк, вы можете отобразить любое представление в качестве органа уведомления, поэтому здесь нет никакой магии. Более интересный вопрос заключается в том, как получить информацию о ходе работы с загрузкой фотографий. Вам нужно сломать загрузку в куски и загрузить их по одному. Похоже, много работы для довольно бесполезного эффекта. Я имею в виду, кто в здравом уме будет смотреть на индикатор прогресса в уведомлении ... – Matthias

+0

Это было направлено @Mark – Matthias

12

В Android, чтобы отобразить индикатор прогресса в Notification, вам просто нужно инициализировать 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 называется прогресс (например прогресс = 10):

//Update notification information: 
notificationBuilder.setProgress(100, progress, false); 

//Send the notification: 
notification = notificationBuilder.build(); 
notificationManager.notify(notificationID, notification); 

Вы можете найти более подробную информацию о API Уведомления страница: http://developer.android.com/guide/topics/ui/notifiers/notifications.html#Progress

-1

Открытый класс нагрузкиVideo распространяется 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); 
    } 
} 

проверить это, если это может помочь u

0

Вы this библиотека и наслаждайтесь ..! проверить пример для более подробной информации ..

1

Вы можете попробовать этот класс это поможет вам генерировать уведомление о

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; 
} 
} 
Смежные вопросы