Zoeken…


Invoering

Via meldingskanalen kunnen app-ontwikkelaars onze meldingen in groepen (kanalen) groeperen, waarbij de gebruiker de meldingsinstellingen voor het hele kanaal in één keer kan wijzigen. In Android O is deze functie geïntroduceerd. Nu is het beschikbaar als preview voor ontwikkelaars.

Syntaxis

  1. class NotificationUtils {} // Voor het maken van een meldingskanaal
  2. createChannel () // Algemene methode voor het maken van meldingen

parameters

Methode Beschrijving
IMPORTANCE_MAX ongebruikt
PRIORITEIT: HOOG toont overal, maakt lawaai en gluurt
IMPORTANCE_DEFAULT toont overal, maakt lawaai, maar dringt niet visueel binnen
IMPORTANCE_LOW toont overal, maar is niet opdringerig
IMPORTANCE_MIN wordt alleen weergegeven in de schaduw, onder de vouw
IMPORTANCE_NONE een kennisgeving zonder belang; verschijnt niet in de schaduw

Meldingskanaal

Wat zijn meldingskanalen?

Via meldingskanalen kunnen app-ontwikkelaars onze meldingen in groepen (kanalen) groeperen, waarbij de gebruiker de meldingsinstellingen voor het hele kanaal in één keer kan wijzigen. Voor elk kanaal kunnen gebruikers bijvoorbeeld alle meldingen volledig blokkeren, het belangsniveau overschrijven of toestaan dat een meldingsbadge wordt weergegeven. Deze nieuwe functie helpt bij het aanzienlijk verbeteren van de gebruikerservaring van een app.

Maak meldingskanalen

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

In de bovenstaande code hebben we twee exemplaren van het Meldingskanaal gemaakt, waarbij Uniqueid een kanaalnaam heeft doorgegeven, en ook een belangrijkheidsniveau in de constructor. Voor elk meldingskanaal hebben we de volgende kenmerken toegepast.

  1. Geluid
  2. Lichten
  3. vibratie
  4. Melding voor weergave op vergrendelscherm.

Ten slotte hebben we de NotificationManager van het systeem gekregen en vervolgens het kanaal geregistreerd door de methode createNotificationChannel () aan te roepen en het kanaal te passeren dat we hebben gemaakt.

We kunnen meerdere meldingskanalen tegelijk maken met createNotificationChannels (), waarbij we een Java-lijst met NotificationChannel-exemplaren doorgeven. Je kunt alle meldingskanalen voor een app krijgen met getNotificationChannels () en een specifiek kanaal krijgen met getNotificationChannel (), waarbij alleen de kanaal-id als argument wordt doorgegeven.

Belangniveau in meldingskanalen

Methode Beschrijving
IMPORTANCE_MAX ongebruikt
PRIORITEIT: HOOG toont overal, maakt lawaai en gluurt
IMPORTANCE_DEFAULT toont overal, maakt lawaai, maar dringt niet visueel binnen
IMPORTANCE_LOW wordt overal weergegeven, maar is niet opdringerig, waarde is 0
IMPORTANCE_MIN wordt alleen weergegeven in de schaduw, onder de vouw
IMPORTANCE_NONE een kennisgeving zonder belang; verschijnt niet in de schaduw

Maak een melding en plaats deze op kanaal

We hebben twee meldingen gemaakt, de ene met NotificationUtils en de andere met 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);
}

We kunnen ook NotificationChannel instellen met Notification.Builder (). Daarvoor kunnen we setChannel (String channelId) gebruiken .

Update meldingskanaalinstellingen

Nadat u een meldingskanaal hebt gemaakt, is de gebruiker verantwoordelijk voor de instellingen en het gedrag. U kunt createNotificationChannel () opnieuw aanroepen om een bestaand meldingskanaal te hernoemen of de beschrijving bij te werken. De volgende voorbeeldcode beschrijft hoe u een gebruiker kunt omleiden naar de instellingen voor een meldingskanaal door een intentie te creëren om een activiteit te starten. In dit geval vereist de intentie uitgebreide gegevens, waaronder de ID van het meldingskanaal en de pakketnaam van uw 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-bestand:

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

Meldingskanaal verwijderen

U kunt meldingskanalen verwijderen door deleteNotificationChannel () aan te roepen.

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

Maak nu MainActivity en 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

we gaan onze MainActivity bewerken zodat we de titel en auteur van de EditText-componenten kunnen ophalen en deze vervolgens naar het Android-kanaal kunnen verzenden. We krijgen de Notification.Builder voor het Android-kanaal dat we in onze NotificationUtils hebben gemaakt en stellen vervolgens de NotificationManager op de hoogte.

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

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow