Suche…


Einführung

Benachrichtigungskanäle ermöglichen es App-Entwicklern, unsere Benachrichtigungen in Gruppen (Channels) zu gruppieren, wobei der Benutzer die Benachrichtigungseinstellungen für den gesamten Kanal gleichzeitig ändern kann. In Android O wird diese Funktion eingeführt. Jetzt steht eine Vorschau für Entwickler zur Verfügung.

Syntax

  1. class NotificationUtils {} // Zum Erstellen eines Benachrichtigungskanals
  2. createChannel () // Generische Methode zum Erstellen von Benachrichtigungen

Parameter

Methode Beschreibung
IMPORTANCE_MAX ungebraucht
WICHTIGKEIT: HOCH zeigt überall, macht Lärm und Blicke
IMPORTANCE_DEFAULT zeigt überall, macht Lärm, stört aber nicht
IMPORTANCE_LOW zeigt überall, ist aber nicht aufdringlich
IMPORTANCE_MIN nur im Schatten, unterhalb der Falte
IMPORTANCE_NONE eine Benachrichtigung ohne Bedeutung; zeigt nicht im Schatten

Benachrichtigungskanal

Was sind Benachrichtigungskanäle?

Benachrichtigungskanäle ermöglichen es App-Entwicklern, unsere Benachrichtigungen in Gruppen (Channels) zu gruppieren, wobei der Benutzer die Benachrichtigungseinstellungen für den gesamten Kanal gleichzeitig ändern kann. Zum Beispiel können Benutzer für jeden Kanal alle Benachrichtigungen vollständig blockieren, die Wichtigkeitsstufe überschreiben oder die Anzeige eines Benachrichtigungsausweises zulassen. Diese neue Funktion trägt dazu bei, die Benutzererfahrung einer App erheblich zu verbessern.

Erstellen Sie Benachrichtigungskanäle

 import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.content.ContextWrapper;
import android.graphics.Color;
 
public class NotificationUtils extends ContextWrapper {


private NotificationManager mManager;
public static final String ANDROID_CHANNEL_ID = "com.sai.ANDROID";
public static final String IOS_CHANNEL_ID = "com.sai.IOS";
public static final String ANDROID_CHANNEL_NAME = "ANDROID CHANNEL";
public static final String IOS_CHANNEL_NAME = "IOS CHANNEL";

public NotificationUtils(Context base) {
    super(base);
    createChannels();
}

public void createChannels() {

    // create android channel
    NotificationChannel androidChannel = new NotificationChannel(ANDROID_CHANNEL_ID,
            ANDROID_CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT);
    // Sets whether notifications posted to this channel should display notification lights
    androidChannel.enableLights(true);
    // Sets whether notification posted to this channel should vibrate.
    androidChannel.enableVibration(true);
    // Sets the notification light color for notifications posted to this channel
    androidChannel.setLightColor(Color.BLUE);
    // Sets whether notifications posted to this channel appear on the lockscreen or not
    androidChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);

    getManager().createNotificationChannel(androidChannel);

    // create ios channel
    NotificationChannel iosChannel = new NotificationChannel(IOS_CHANNEL_ID,
            IOS_CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH);
    iosChannel.enableLights(true);
    iosChannel.enableVibration(true);
    iosChannel.setLightColor(Color.GRAY);
    iosChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
    getManager().createNotificationChannel(iosChannel);


  }


private NotificationManager getManager() {
    if (mManager == null) {
        mManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    }
    return mManager;
}}

Im obigen Code haben wir zwei Instanzen des NotificationChannel erstellt, wobei uniqueid einen Kanalnamen und eine Wichtigkeitsstufe in seinem Konstruktor übergeben. Für jeden Benachrichtigungskanal haben wir die folgenden Merkmale angewendet.

  1. Klingen
  2. Beleuchtung
  3. Vibration
  4. Benachrichtigung, die auf dem Sperrbildschirm angezeigt wird.

Schließlich haben wir den NotificationManager vom System erhalten und dann den Kanal registriert, indem wir die Methode createNotificationChannel () aufgerufen haben und den von uns erstellten Kanal übergeben.

Mit createNotificationChannels () können wir mehrere Benachrichtigungskanäle auf einmal erstellen und eine Java-Liste mit NotificationChannel-Instanzen übergeben. Sie können alle Benachrichtigungskanäle für eine App mit getNotificationChannels () und einen bestimmten Kanal mit getNotificationChannel () abrufen, wobei nur die Kanal-ID als Argument übergeben wird.

Wichtigkeitsgrad in Benachrichtigungskanälen

Methode Beschreibung
IMPORTANCE_MAX ungebraucht
WICHTIGKEIT: HOCH zeigt überall, macht Lärm und Blicke
IMPORTANCE_DEFAULT zeigt überall, macht Lärm, stört aber nicht
IMPORTANCE_LOW zeigt überall, ist aber nicht aufdringlich, der Wert ist 0
IMPORTANCE_MIN nur im Schatten, unterhalb der Falte
IMPORTANCE_NONE eine Benachrichtigung ohne Bedeutung; zeigt nicht im Schatten

Erstellen Sie eine Benachrichtigung und veröffentlichen Sie sie in den Kanal

Wir haben zwei Benachrichtigungen erstellt, die NotificationUtils verwenden, und NotificationBuilder.

public Notification.Builder getAndroidChannelNotification(String title, String body) {
    return new Notification.Builder(getApplicationContext(), ANDROID_CHANNEL_ID)
            .setContentTitle(title)
            .setContentText(body)
            .setSmallIcon(android.R.drawable.stat_notify_more)
            .setAutoCancel(true);
}
 
public Notification.Builder getIosChannelNotification(String title, String body) {
    return new Notification.Builder(getApplicationContext(), IOS_CHANNEL_ID)
            .setContentTitle(title)
            .setContentText(body)
            .setSmallIcon(android.R.drawable.stat_notify_more)
            .setAutoCancel(true);
}

Wir können NotificationChannel auch mit Notification.Builder () einstellen , dazu können wir setChannel (String channelId) verwenden .

Benachrichtigungskanaleinstellungen aktualisieren

Nachdem Sie einen Benachrichtigungskanal erstellt haben, ist der Benutzer für die Einstellungen und das Verhalten verantwortlich. Sie können createNotificationChannel () erneut aufrufen, um einen vorhandenen Benachrichtigungskanal umzubenennen oder die Beschreibung zu aktualisieren. Der folgende Beispielcode beschreibt, wie Sie einen Benutzer zu den Einstellungen für einen Benachrichtigungskanal umleiten können, indem Sie eine Absicht erstellen, um eine Aktivität zu starten. In diesem Fall erfordert die Absicht erweiterte Daten, einschließlich der ID des Benachrichtigungskanals und des Paketnamens Ihrer App.

@Override
protected void onCreate(Bundle savedInstanceState) {
    //...
    Button buttonAndroidNotifSettings = (Button) findViewById(R.id.btn_android_notif_settings);
    buttonAndroidNotifSettings.setOnClickListener(new View.OnClickListener() {
     
        @Override
        public void onClick(View view) {
            Intent i = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
            i.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
            i.putExtra(Settings.EXTRA_CHANNEL_ID, NotificationUtils.ANDROID_CHANNEL_ID);
            startActivity(i);
        }
    });
}

XML-Datei:

<!--...-->
<Button
    android:id="@+id/btn_android_notif_settings"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Notification Settings"/>
<!--...-->

Benachrichtigungskanal löschen

Sie können Benachrichtigungskanäle löschen, indem Sie deleteNotificationChannel () aufrufen.

NotificationManager mNotificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The id of the channel.
String id = "my_channel_01";
NotificationChannel mChannel = mNotificationManager.getNotificationChannel(id);
mNotificationManager.deleteNotificationChannel(mChannel);

Erstellen Sie jetzt MainActivity und XML

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:layout_margin="16dp"
        tools:context="com.chikeandroid.tutsplusalerts.MainActivity">
 
    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
 
        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Tuts+ Android Channel"
                android:layout_gravity="center_horizontal"
                android:textAppearance="@style/TextAppearance.AppCompat.Title"/>
 
        <EditText
                android:id="@+id/et_android_title"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Title"/>
 
        <EditText
                android:id="@+id/et_android_author"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Author"/>
         
        <Button
                android:id="@+id/btn_send_android"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Send"/>
    </LinearLayout>
 
    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_marginTop="20dp">
 
        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Tuts+ IOS Channel"
                android:layout_gravity="center_horizontal"
                android:textAppearance="@style/TextAppearance.AppCompat.Title"/>
 
        <EditText
                android:id="@+id/et_ios_title"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Title"
                />
 
        <EditText
                android:id="@+id/et_ios_author"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Author"/>
        <Button
                android:id="@+id/btn_send_ios"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Send"/>
    </LinearLayout>
     
</LinearLayout>

MainActivity.java

Wir werden unsere MainActivity so bearbeiten, dass Titel und Autor von den EditText-Komponenten abgerufen und an den Android-Kanal gesendet werden können. Wir erhalten den Notification.Builder für den Android-Kanal, den wir in unseren NotificationUtils erstellt haben, und benachrichtigen dann den NotificationManager.

import android.app.Notification; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText;

public class MainActivity extends AppCompatActivity {
 
    private NotificationUtils mNotificationUtils;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        mNotificationUtils = new NotificationUtils(this);
 
        final EditText editTextTitleAndroid = (EditText) findViewById(R.id.et_android_title);
        final EditText editTextAuthorAndroid = (EditText) findViewById(R.id.et_android_author);
        Button buttonAndroid = (Button) findViewById(R.id.btn_send_android);
 
        buttonAndroid.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String title = editTextTitleAndroid.getText().toString();
                String author = editTextAuthorAndroid.getText().toString();
 
                if(!TextUtils.isEmpty(title) && !TextUtils.isEmpty(author)) {
                    Notification.Builder nb = mNotificationUtils.
                            getAndroidChannelNotification(title, "By " + author);
 
                    mNotificationUtils.getManager().notify(107, nb.build());
                }
            }
        });
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow