Android
Meldingskanaal Android O
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
- class NotificationUtils {} // Voor het maken van een meldingskanaal
- 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.
- Geluid
- Lichten
- vibratie
- 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());
}
}
});
}
}