Android
Notificacion canal android o
Buscar..
Introducción
Los canales de notificación nos permiten a los desarrolladores de aplicaciones agrupar nuestras notificaciones en grupos (canales), y el usuario tiene la capacidad de modificar la configuración de notificación para todo el canal a la vez. En Android O se presenta esta función. Ahora mismo está disponible la vista previa para desarrolladores.
Sintaxis
- clase NotificationUtils {} // para crear un canal de notificación
- createChannel () // Método genérico para crear notificaciones
Parámetros
Método | Descripción |
---|---|
IMPORTANCE_MAX | no usado |
IMPORTANCIA: ALTA | Se muestra por todas partes, hace ruido y asoma. |
IMPORTANCE_DEFAULT | Se muestra en todas partes, hace ruido, pero no interfiere visualmente. |
IMPORTANCE_LOW | Muestra en todas partes, pero no es intrusivo. |
IMPORTANCE_MIN | Solo se muestra en la sombra, debajo del pliegue. |
IMPORTANCE_NONE | una notificación sin importancia; no se muestra en la sombra |
Canal de notificaciones
¿Qué son los canales de notificación?
Los canales de notificación nos permiten a los desarrolladores de aplicaciones agrupar nuestras notificaciones en grupos, canales, y el usuario tiene la capacidad de modificar la configuración de notificación para todo el canal a la vez. Por ejemplo, para cada canal, los usuarios pueden bloquear completamente todas las notificaciones, anular el nivel de importancia o permitir que se muestre una credencial de notificación. Esta nueva característica ayuda a mejorar en gran medida la experiencia del usuario de una aplicación.
Crear canales de notificación
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;
}}
En el código anterior, creamos dos instancias de NotificationChannel, pasando un nombre de canal a un nombre único y también un nivel de importancia en su constructor. Para cada canal de notificación, aplicamos las siguientes características.
- Sonar
- Luces
- Vibración
- Notificación para mostrar en pantalla de bloqueo.
Finalmente, obtuvimos el NotificationManager del sistema y luego registramos el canal llamando al método createNotificationChannel (), pasando el canal que hemos creado.
Podemos crear múltiples canales de notificación a la vez con createNotificationChannels (), pasando una lista de Java de instancias de NotificationChannel. Puede obtener todos los canales de notificación para una aplicación con getNotificationChannels () y obtener un canal específico con getNotificationChannel (), pasando solo la identificación del canal como argumento.
Nivel de importancia en los canales de notificación.
Método | Descripción |
---|---|
IMPORTANCE_MAX | no usado |
IMPORTANCIA: ALTA | Se muestra por todas partes, hace ruido y asoma. |
IMPORTANCE_DEFAULT | Se muestra en todas partes, hace ruido, pero no interfiere visualmente. |
IMPORTANCE_LOW | Muestra en todas partes, pero no es intrusivo, el valor es 0 |
IMPORTANCE_MIN | Solo se muestra en la sombra, debajo del pliegue. |
IMPORTANCE_NONE | una notificación sin importancia; no se muestra en la sombra |
Crear notificación y publicar en el canal
Hemos creado dos notificaciones una usando NotificationUtils otra usando 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);
}
También podemos configurar NotificationChannel usando Notification.Builder (). Para eso podemos usar setChannel (String channelId) .
Actualizar la configuración del canal de notificación
Una vez que crea un canal de notificación, el usuario se encarga de su configuración y comportamiento. Puede llamar a createNotificationChannel () nuevamente para cambiar el nombre de un canal de notificación existente o actualizar su descripción. El siguiente código de ejemplo describe cómo puede redirigir a un usuario a la configuración de un canal de notificación al crear una intención de iniciar una actividad. En este caso, la intención requiere datos extendidos, incluido el ID del canal de notificación y el nombre del paquete de su aplicación.
@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);
}
});
}
Archivo XML:
<!--...-->
<Button
android:id="@+id/btn_android_notif_settings"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Notification Settings"/>
<!--...-->
Eliminando el canal de notificación
Puede eliminar los canales de notificación llamando a 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);
Ahora crea MainActivity y 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
Vamos a editar nuestra MainActivity para que podamos obtener el título y el autor de los componentes de EditText y luego enviarlos al canal de Android. Obtenemos Notification.Builder para el canal de Android que creamos en NotificationUtils y luego notificamos a NotificationManager.
importar android.app.Notification; importar android.os.Bundle; importar android.support.v7.app.AppCompatActivity; importar android.text.TextUtils; importar android.view.View; importar android.widget.Button; importar 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());
}
}
});
}
}