2012-02-28 3 views
0

Я использую Notification Manager для загрузки контента и показываю процент завершенной загрузки, но каждый раз, когда я вызываю функцию displaymessage с новым процентом, он создает новое уведомление. Как я могу просто обновлять уведомление без создания нового каждый раз?Процент обновления для менеджера уведомлений Android

public void displaymessage(String string) { 
String ns = Context.NOTIFICATION_SERVICE; 
NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns); 
int icon = R.drawable.icon; 
CharSequence tickerText = "Shamir Download Service"; 
long when = System.currentTimeMillis(); 
Notification notification = new Notification(icon, tickerText, when); 
Context context = getApplicationContext(); 
CharSequence contentTitle = "Downloading Content:"; 
notification.setLatestEventInfo(context, contentTitle, string, null); 
final int HELLO_ID = 2; 
mNotificationManager.notify(HELLO_ID, notification); 

} 
+0

Не полностью быть член и обходить ваш вопрос, но посмотрите на [DownloadManager] (http://developer.android.com/reference/android/app/DownloadManager .html) – hwrdprkns

ответ

1

Что я сделал хранить уведомление в переменном уровне класса .. Возможно изменить функцию createDownloadNotification и использовать то, что у вас есть выше, за исключением сделать уведомление переменным доступным для всего класса.

Затем есть другая функция (что-то вроде updateDownloadNotification), которая вызовет setLatestEventInfo в уведомлении с обновленной информацией.

Также обратите внимание, что вам необходимо вызвать mNotificationManager.notify (HELLO_ID, уведомление); после каждого обновления или ничего не изменится.

--- Обновление --- На самом деле у вас может быть только 1 функция и проверьте, является ли уведомление нулевым (если нет, создайте его), в противном случае используйте то, что у вас уже есть.

Пример:

public class YourClass extends Service { //or it may extend Activity 

private Notification mNotification = null; 

public void displaymessage(String string) { 
    String ns = Context.NOTIFICATION_SERVICE; 

    NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns); 
    int icon = R.drawable.icon; 
    CharSequence tickerText = "Shamir Download Service"; 
    long when = System.currentTimeMillis(); 
    if (mNotification == null) { 
    mNotification = new Notification(icon, tickerText, when); 
    } 
//mNotification.when = when;//not sure if you need to update this try it both ways 
    Context context = getApplicationContext(); 
    CharSequence contentTitle = "Downloading Content:"; 
    notification.setLatestEventInfo(context, contentTitle, string, null); 
    final int HELLO_ID = 2; 
    mNotificationManager.notify(HELLO_ID, mNotification); 

} 

Мой код на самом деле немного отличается тем, что все, что я обновлением является iconLevel уведомления о каждом обновлении, поэтому я не уверен, что с каждым изменением, если вам нужно обновить mNotification.when

Попробуйте и посмотрите и сообщите об этом.

Также я бы сделал некоторые переменные из этой функции. Обычно вы называете переменную mSomething, если она является частной переменной экземпляра класса. Вот что я бы рекомендовал:

private Notification mNotification = null; 
private NotificationManager mNotificationManager = null; 
private static final int HELLO_ID = 2; 

public void displaymessage(String string) { 
    String ns = Context.NOTIFICATION_SERVICE; 
    if (mNotificationmanager == null) { 
     mNotificationManager = (NotificationManager) getSystemService(ns); 
    } 
    int icon = R.drawable.icon; 
    CharSequence tickerText = "Shamir Download Service"; 
    long when = System.currentTimeMillis(); 
    if (mNotification == null) { 
    mNotification = new Notification(icon, tickerText, when); 
    } 
    //mNotification.when = when;//not sure if you need to update this try it both ways 
    Context context = getApplicationContext();  
    notification.setLatestEventInfo(context, contentTitle, string, null);  
    mNotificationManager.notify(HELLO_ID, mNotification); 

} 
+0

Спасибо за ответ, я попытался сделать это с помощью инструкции else, если {код выше}, else { notification.setLatestEventInfo (context, contentTitle, string, null); \t mNotificationManager.notify (HELLO_ID, уведомление);} но это не сработало, не могли бы вы показать мне пример? – DanM