Android
Benachrichtigungskanal Android O
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
- class NotificationUtils {} // Zum Erstellen eines Benachrichtigungskanals
- 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.
- Klingen
- Beleuchtung
- Vibration
- 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());
}
}
});
}
}