Android
Meddelande kanal Android O
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
- klass NotificationUtils {} // För att skapa anmälningskanal
- 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.
- Ljud
- Lights
- Vibration
- 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());
}
}
});
}
}