2013-04-09 10 views
6

Ich brauche Hilfe, um etwas zu tun. Ich versuche, eine Benachrichtigung in der Android-Statusleiste anzuzeigen.Android Anzeige einer Benachrichtigung in der Statusleiste ohne erweiterbare Ansicht

Es informiert den Benutzer, dass eine Synchronisation mit dem Server in Arbeit ist.

Nun verwende ich diesen Code und es funktioniert gut:

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

Das einzige Problem ist, dass eine Ansicht erstellt, wenn der Benutzer die Statusbar erweitern. Ich möchte nur ein kleines Symbol oben in der Statusleiste anzeigen, ohne die Inhaltsansicht.

Wer weiß, wie man das macht? Vielen Dank im Voraus!

+0

ich mehrere Antwort von CommonsWare sah, die sagen: das ist nicht möglich, aber ich habe auch in s gesehen mehrere App (z.B. Yahoo Mail) das macht es –

Antwort

3

Dies ist nicht möglich, zu zeigen.

Die Begründung ist dies: Wenn der Benutzer auf die Statusleiste schaut und ein Symbol sieht, sollte sie eine Möglichkeit haben herauszufinden, was dieses Symbol bedeutet. Daher muss im Benachrichtigungsfeld für jedes Symbol eine Zeile stehen.

Ich schlage vor, eine Benachrichtigung zu erstellen, die erklärt, genau wie Sie in Ihrer Frage getan haben, dass eine Synchronisierung in Arbeit ist; Dies ist eine großartige Möglichkeit, um anzugeben, welche App gerade synchronisiert wird (wenn also ein Problem auftritt oder die Synchronisierung ewig dauert, weiß der Benutzer, welche App beachtet werden muss).

+0

Danke für deine Antwort. Ich habe gesehen, dass Yahoo Mail eine Benachrichtigung ohne eine entbehrliche Ansicht macht, also ist es seltsam ... –

+0

Wirklich? Es ist wirklich nicht möglich, ein Symbol ohne eine Zeile im Benachrichtigungsfarbton zu erstellen. Kannst du mich auf einen Screenshot oder sowas hinweisen? – dsandler

+0

Ich liege falsch mit Yahoo Mail .. Die Symbolanzeige von Yahoo App ist das Sync-Symbol, das vom Betriebssystem angezeigt wird. Ich verwende einen anderen Weg, um den Benutzer zu benachrichtigen, während die App eine Serververbindung herstellt ;-) Danke! –

1

können Sie diese Methode verwenden Benachrichtigungssymbol in der Statusleiste

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

Danke für Ihre Antwort, aber es ist nicht was ich will. Ihr Code die gleiche Sache, die meine (und diese Art zu instanziieren eine Benachrichtigung ist veraltet). Ich möchte keine Ansicht im Benachrichtigungsfeld, sondern nur das kleine Symbol in der Statusleiste Wenn ich keine Ansicht für das Benachrichtigungsfeld einstelle, tritt diese Ausnahme auf: 'java.lang.IllegalArgumentException: contentView erforderlich : pkg = com.test.app.notification id = 1 notification = Benachrichtigung (pri = 0 contentView = null vibrieren = null sound = null defaults = 0x0 flags = 0x0 art = [null]) ' –

0

Nun, dies ist für einen InputMethodService möglich, verwenden Sie einfach showStatusIcon (resource_name). Aber ich denke, das ist keine gute Idee für etwas außer Eingabedienste.

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

erstellen die Meldung:

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

erstellen Schwebende Objekt:

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

schließlich die Benachrichtigung anzeigen Nutzer:

notificationManager.notify(LIST_UPDATE_NOTIFICATION, updateComplete); 
Verwandte Themen