Sök…


Introduktion

Meddelandekanaler gör det möjligt för oss apputvecklare att gruppera våra meddelanden i grupper — kanaler — där användaren har möjlighet att ändra aviseringsinställningar för hela kanalen på en gång. I Android O introduceras den här funktionen.Rätt nu är det tillgängligt förhandsgranskare av utvecklare.

Syntax

  1. klass NotificationUtils {} // För att skapa anmälningskanal
  2. createChannel () // Generisk metod för att skapa meddelande

parametrar

Metod Beskrivning
IMPORTANCE_MAX oanvänd
IMPORTANCE_HIGH visar överallt, gör ljud och tittar
IMPORTANCE_DEFAULT visar överallt, gör ljud men stör inte visuellt
IMPORTANCE_LOW visar överallt, men är inte påträngande
IMPORTANCE_MIN visar bara i skuggan, under vecket
IMPORTANCE_NONE en anmälan utan betydelse; visas inte i skuggan

Meddelande kanal

Vad är anmälningskanaler?

Meddelandekanaler gör det möjligt för oss apputvecklare att gruppera våra aviseringar i grupper - kanaler - där användaren har möjlighet att ändra aviseringar för hela kanalen på en gång. Till exempel kan användare för varje kanal blockera alla aviseringar, åsidosätta viktighetsnivån eller tillåta att ett meddelandemärke visas. Den här nya funktionen hjälper dig att förbättra användarupplevelsen för en app kraftigt.

Skapa anmälningskanaler

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

I koden ovan skapade vi två instanser av NotificationChannel, som passerade ungefär ett kanalnamn och också en viktnivå i sin konstruktör. För varje anmälningskanal tillämpade vi följande egenskaper.

  1. Ljud
  2. Lights
  3. Vibration
  4. Meddelande att visas på låsskärmen.

Slutligen fick vi NotificationManager från systemet och registrerade sedan kanalen genom att kalla metoden createNotificationChannel () och passera kanalen vi har skapat.

Vi kan skapa flera anmälningskanaler samtidigt med createNotificationChannels () och passerar en Java-lista med NotificationChannel-instanser. Du kan få alla anmälningskanaler för en app med getNotificationChannels () och få en specifik kanal med getNotificationChannel () och bara skicka kanal-id som ett argument.

Betydelsenivå i anmälningskanaler

Metod Beskrivning
IMPORTANCE_MAX oanvänd
IMPORTANCE_HIGH visar överallt, gör ljud och tittar
IMPORTANCE_DEFAULT visar överallt, gör ljud men stör inte visuellt
IMPORTANCE_LOW visar överallt, men är inte påträngande, värdet är 0
IMPORTANCE_MIN visar bara i skuggan, under vecket
IMPORTANCE_NONE en anmälan utan betydelse; visas inte i skuggan

Skapa avisering och post för att kanalisera

Vi har skapat två meddelanden, en med NotificationUtils en annan med 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);
}

Vi kan också ställa in NotificationChannel med hjälp av Notification.Builder (). För det kan vi använda setChannel (String channelId) .

Uppdatera aviseringskanalinställningar

När du har skapat en aviseringskanal ansvarar användaren för inställningar och beteenden. Du kan ringa createNotificationChannel () igen för att byta namn på en befintlig aviseringskanal eller uppdatera beskrivningen. Följande exempelkod beskriver hur du kan omdirigera en användare till inställningarna för en aviseringskanal genom att skapa en avsikt att starta en aktivitet. I detta fall kräver avsikten utökad information inklusive ID för anmälningskanalen och paketnamnet på din 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-fil:

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

Radera aviseringskanal

Du kan radera aviseringskanaler genom att ringa deleteNotificationChannel ().

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

Skapa nu MainActivity och 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

vi kommer att redigera vår MainActivity så att vi kan få titeln och författaren från EditText-komponenterna och sedan skicka dessa till Android-kanalen. Vi får Notification.Builder för Android-kanalen som vi skapade i våra NotificationUtils och meddelar sedan 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow