2013-04-09 11 views
6

Potrzebuję pomocy, aby coś zrobić. Próbuję wyświetlić powiadomienie na pasku stanu Android.Android Wyświetlaj powiadomienie na pasku stanu bez rozwijanego widoku

Poinformuje użytkownika, że ​​trwa synchronizacja z serwerem.

Teraz używam tego kodu i działa prawidłowo:

NotificationCompat.Builder builder = new NotificationCompat.Builder(this) 
      .setSmallIcon(android.R.drawable.stat_notify_sync).setWhen(System.currentTimeMillis()) 
      .setAutoCancel(false).setOngoing(true); 

    NotificationManager nm = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); 
    Notification notif = builder.getNotification(); 
    nm.notify(1, notif); 

tylko jeden problem jest to, że widok jest tworzony, gdy użytkownik rozwinąć stanu. Chcę tylko wyświetlać małą ikonę na pasku stanu bez widoku zawartości.

Ktoś wie, jak to zrobić? Z góry dziękuję!

+0

widziałem kilka odpowiedzi od CommonsWare że powiedzenia że nie jest to możliwe, ale widziałem też w s everal app (np. Yahoo Mail), które sprawiają, że jest to –

Odpowiedz

3

To nie jest możliwe.

Uzasadnieniem jest to, że jeśli użytkownik patrzy na pasek stanu i widzi ikonę, powinna w jakiś sposób dowiedzieć się, co oznacza ta ikona. Dlatego na panelu powiadomień musi znajdować się rząd odpowiadający każdej z ikon.

Proponuję utworzyć powiadomienie, które wyjaśnia, tak jak zrobiłeś w swoim pytaniu, że synchronizacja jest w toku; jest to świetna okazja do wskazania, która aplikacja jest obecnie synchronizowana (więc jeśli wystąpi jakiś problem lub synchronizacja trwa wiecznie, użytkownik wie, która aplikacja wymaga uwagi).

+0

Dziękuję za odpowiedź. Widziałem, że Yahoo Mail robi powiadomienie bez zbędnego widoku, więc to jest dziwne ... –

+0

Naprawdę? Naprawdę nie można utworzyć ikony bez wiersza w obszarze powiadomień. Czy możesz wskazać mi zrzut ekranu lub coś takiego? – dsandler

+0

Mylę się z pocztą Yahoo .. Ikona wyświetlana przez aplikację Yahoo jest ikoną synchronizacji wyświetlaną przez system operacyjny. Używam innego sposobu powiadamiania użytkownika, gdy aplikacja wykonuje połączenie z serwerem ;-) Dzięki! –

1

Można użyć tej metody, aby pokazać ikonę powiadomień na pasku stanu

private void showNotification() { 
    nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
    // In this sample, we'll use the same text for the ticker and the 
    // expanded notification 

    // Set the icon, scrolling text and timestamp 
    Notification notification = new Notification(R.drawable.ic_launcher, 
      "Service Started", System.currentTimeMillis()); 
    // The PendingIntent to launch our activity if the user selects this 
    // notification 
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, 
      new Intent(this, MainActivity.class), 0); 
    // Set the info for the views that show in the notification panel. 
    notification.setLatestEventInfo(this, getText(R.string.service_label), 
      "Service Started", contentIntent); 
    // Send the notification. 
    // We use a layout id because it is a unique number. We use it later to 
    // cancel. 
    nm.notify(R.string.service_started, notification); 

} 
+0

Dziękuję za odpowiedź, ale to nie jest to, czego chcę. Twój kod robi to samo co moje (i ten sposób utworzenia powiadomienia jest przestarzały). Nie chcę widoku w panelu powiadomień, ale tylko mała ikona na pasku stanu. Jeśli nie wstawię widoku panelu powiadomień, wystąpi wyjątek: 'java.lang.IllegalArgumentException: contentView required : pkg = com.test.app.wiadomość id = 1 powiadomienie = powiadomienie (pri = 0 contentView = null vibrate = null sound = null defaults = 0x0 flags = 0x0 kind = [null]) ' –

0

Cóż, jest to możliwe dla InputMethodService, wystarczy użyć showStatusIcon (resource_name). Ale myślę, że to nie jest dobry pomysł na nic poza usługami wejściowymi.

0
Context context = TutListDownloaderService.this 
.getApplicationContext(); 
NotificationManager notificationManager = (NotificationManager) context 
.getSystemService(NOTIFICATION_SERVICE); 

tworzyć zgłoszenia:

Notification updateComplete = new Notification(); 
updateComplete.icon = android.R.drawable.stat_notify_sync; 
updateComplete.tickerText = context.getText(R.string.notification_title); 
updateComplete.when = System.currentTimeMillis(); 

Tworzenie Oczekuje obiektu:

Intent notificationIntent = new Intent(context,TutListActivity.class); 
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, 
notificationIntent, 0); 

String contentTitle = context.getText(R.string.notification_title).toString(); 
String contentText; 
if (!result) { 
Log.w(DEBUG_TAG, "XML download and parse had errors"); 
contentText = context.getText(R.string.notification_info_fail).toString(); 
} else { 
contentText = context.getText(
    R.string.notification_info_success).toString(); 
} 
updateComplete.setLatestEventInfo(context, contentTitle, contentText, contentIntent); 

wreszcie pokazać powiadomienie do użytkownika:

notificationManager.notify(LIST_UPDATE_NOTIFICATION, updateComplete); 
Powiązane problemy