1

Ich frage mich, wie ich eine feste Symbolleiste in der Android-Statusleiste von jedem Android-Gerät implementieren konnte. Ich spreche über die Schaltflächen in der unten angezeigten Benachrichtigung. Ein Beispiel ist unten angegeben. Ist es möglich, dass dies auch dann ausgeführt wird, wenn der Benutzer die Anwendung nicht geöffnet hat?Android Notification Toolbar in der Statusleiste?

Kann mir bitte jemand in die richtige Richtung zeigen? Gibt es eine Bibliothek oder können wir dies mithilfe der nativen Android-Bibliotheken implementieren?

enter image description here

+0

Sie können einfach eine fortlaufende "Benachrichtigung" mit einer benutzerdefinierten "Ansicht" erstellen, die in einem Boot-Receiver gestartet wird. Keine Notwendigkeit für eine Bibliothek. –

+1

Können Sie mir bitte ein Beispiel oder einen Referenzlink geben? :) @MikeM. – Dinuka

Antwort

1

Als einfaches Beispiel: Der folgende Code wird beim Booten Ausgabe einer laufendes Notification mit einem Button Ihre App zu starten.

Zuerst in Ihrem Manifest, fordern Sie die Erlaubnis, die BOOT_COMPLETED Broadcast zu erhalten, und registrieren Sie einen Empfänger, um damit umzugehen.

<manifest ...> 

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
    ... 

    <application ...> 
     ... 

     <receiver android:name=".BootReceiver"> 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      </intent-filter> 
     </receiver> 
    </application> 
</manifest> 

Die BootReceiver gibt einfach die Notification eine static Methode verwendet, die in MainActivity für dieses Beispiel festgelegt ist.

public class BootReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     MainActivity.setNotification(context, true); 
    } 
} 

Die setNotification() Methode erstellt eine RemoteViews Instanz für die Notification unter dem einfachen Layout verwenden und setzt ein PendingIntent auf die Button mit dem Start Intent für Ihre Anwendung.

public static void setNotification(Context context, boolean enabled) { 
    NotificationManager manager = 
     (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE); 

    if (enabled) { 
     final RemoteViews rViews = new RemoteViews(context.getPackageName(), 
                R.layout.notification); 

     final Intent intent = context.getPackageManager() 
      .getLaunchIntentForPackage(context.getPackageName()); 

     if (intent != null) { 
      PendingIntent pi = PendingIntent.getActivity(context, 
                 0, 
                 intent, 
                 0); 

      rViews.setOnClickPendingIntent(R.id.notification_button_1, pi); 
     } 

     Notification.Builder builder = new Notification.Builder(context); 
     builder.setContent(rViews) 
      .setSmallIcon(R.drawable.ic_launcher) 
      .setWhen(0) 
      .setOngoing(true); 

     manager.notify(0, builder.build()); 
    } 
    else { 
     manager.cancel(0); 
    } 
} 

Die Notification ‚s-Layout ist einfach ein ImageView und eine Button in einer horizontalen LinearLayout.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageView android:id="@+id/notification_image" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_marginRight="10dp" 
     android:src="@drawable/ic_launcher" /> 

    <Button android:id="@+id/notification_button" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:text="Button" /> 

</LinearLayout> 

Bitte beachten Sie, dass, da API 3.1, müssen Sie Ihre App mindestens einmal nach der Installation starten Sie es von der heraus zu bringen Zustand gestoppt. Bis dahin wird die BootReceiver die Sendung nicht zugestellt.

+0

Nicht so wie es ist. Ich war mir nicht sicher, wie Sie damit umgehen wollten, aber Sie müssen nur die 'setNotification()' Methode mit 'true' als zweitem Argument aufrufen, wo immer Sie es ausgeben wollen. Wenn Sie es beispielsweise anzeigen möchten, wenn 'MainActivity' gestartet wird, rufen Sie die folgende Zeile in' MainActivity's 'onCreate()' Methode auf: 'setNotification (this, true);'. Wenn Sie die Benachrichtigung ausblenden möchten, rufen Sie sie mit "false" als zweitem Argument auf. –

+1

Ich habe "wenn der Benutzer die Anwendung nicht geöffnet hat" bedeutet, dass sie ständig angezeigt werden soll, auch wenn der Benutzer die App während der aktuellen Sitzung noch nicht ausgeführt hat. Dafür sorgt der Boot-Receiver. Wenn du deine App installierst, starte sie einmal und starte dann neu, sie wird kurz nach dem Start angezeigt. Es kann ein bisschen dauern. –

+0

Ich bekomme die Benachrichtigung nicht, wenn ich die App starte:/Ist Ihr Code richtig Mike? – Dinuka