Android - Notificações
UMA notificationé uma mensagem que você pode exibir ao usuário fora da IU normal do aplicativo. Quando você instrui o sistema a emitir uma notificação, ela primeiro aparece como um ícone na área de notificação. Para ver os detalhes da notificação, o usuário abre a gaveta de notificação. Tanto a área de notificação quanto a gaveta de notificação são áreas controladas pelo sistema que o usuário pode visualizar a qualquer momento.
Android Toast A classe fornece uma maneira prática de mostrar alertas aos usuários, mas o problema é que esses alertas não são persistentes, o que significa que o alerta pisca na tela por alguns segundos e depois desaparece.
Para ver os detalhes da notificação, você terá que selecionar o ícone que exibirá a gaveta de notificação com detalhes sobre a notificação. Ao trabalhar com o emulador com dispositivo virtual, você terá que clicar e arrastar para baixo a barra de status para expandi-la, que fornecerá os detalhes a seguir. Isso vai ser apenas64 dp alto e chamado de visão normal.
A forma expandida acima pode ter um Big Viewque terá detalhes adicionais sobre a notificação. Você pode adicionar até seis linhas adicionais na notificação. A captura de tela a seguir mostra essa notificação.
Criar e enviar notificações
Você tem uma maneira simples de criar uma notificação. Siga as etapas a seguir em seu aplicativo para criar uma notificação -
Etapa 1 - Criar Construtor de Notificação
A primeira etapa é criar um construtor de notificação usando NotificationCompat.Builder.build () . Você usará o Notification Builder para definir várias propriedades de notificação, como seus ícones pequenos e grandes, título, prioridade, etc.
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
Etapa 2 - Definir propriedades de notificação
Uma vez que você tenha Builder, você pode definir suas propriedades de Notificação usando o objeto Builder de acordo com sua necessidade. Mas isso é obrigatório para definir pelo menos o seguinte -
Um pequeno ícone, definido por setSmallIcon()
Um título, definido por setContentTitle()
Texto detalhado, definido por setContentText()
mBuilder.setSmallIcon(R.drawable.notification_icon);
mBuilder.setContentTitle("Notification Alert, Click Me!");
mBuilder.setContentText("Hi, This is Android Notification Detail!");
Você tem muitas propriedades opcionais que pode definir para sua notificação. Para saber mais sobre eles, consulte a documentação de referência para NotificationCompat.Builder.
Etapa 3 - Anexar ações
Esta é uma parte opcional e necessária se você deseja anexar uma ação à notificação. Uma ação permite aos usuários ir diretamente da notificação para umActivity em seu aplicativo, onde eles podem ver um ou mais eventos ou trabalhar mais.
A ação é definida por um PendingIntent contendo um Intentque inicia uma atividade em seu aplicativo. Para associar o PendingIntent a um gesto, chame o método apropriado de NotificationCompat.Builder . Por exemplo, se você deseja iniciar a Atividade quando o usuário clica no texto da notificação na gaveta de notificação, você adiciona o PendingIntent chamandosetContentIntent().
Um objeto PendingIntent ajuda você a executar uma ação em nome de seus aplicativos, geralmente mais tarde, sem se preocupar se o aplicativo está ou não em execução.
Recebemos ajuda do objeto stack builder que conterá uma pilha de retorno artificial para a Activity iniciada. Isso garante que a navegação para trás a partir da Activity conduza de seu aplicativo à tela inicial.
Intent resultIntent = new Intent(this, ResultActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(ResultActivity.class);
// Adds the Intent that starts the Activity to the top of the stack
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(resultPendingIntent);
Etapa 4 - Emita a notificação
Por fim, você passa o objeto Notification para o sistema chamando NotificationManager.notify () para enviar sua notificação. Certifique-se de ligarNotificationCompat.Builder.build()método no objeto construtor antes de notificá-lo. Este método combina todas as opções que foram definidas e retorna um novoNotification objeto.
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// notificationID allows you to update the notification later on.
mNotificationManager.notify(notificationID, mBuilder.build());
A classe NotificationCompat.Builder
A classe NotificationCompat.Builder permite um controle mais fácil sobre todos os sinalizadores, bem como ajuda a construir os layouts de notificação típicos. A seguir estão alguns métodos importantes e usados com mais frequência disponíveis como parte da classe NotificationCompat.Builder.
Sr. Não. | Constantes e Descrição |
---|---|
1 | Notification build() Combine todas as opções que foram definidas e retorne um novo objeto Notificação. |
2 | NotificationCompat.Builder setAutoCancel (boolean autoCancel) Definir este sinalizador fará com que a notificação seja automaticamente cancelada quando o usuário clicar nele no painel. |
3 | NotificationCompat.Builder setContent (RemoteViews views) Forneça um RemoteViews personalizado para usar em vez do padrão. |
4 | NotificationCompat.Builder setContentInfo (CharSequence info) Defina o texto grande no lado direito da notificação. |
5 | NotificationCompat.Builder setContentIntent (PendingIntent intent) Forneça um PendingIntent para enviar quando a notificação for clicada. |
6 | NotificationCompat.Builder setContentText (CharSequence text) Defina o texto (segunda linha) da notificação, em uma notificação padrão. |
7 | NotificationCompat.Builder setContentTitle (CharSequence title) Defina o texto (primeira linha) da notificação, em uma notificação padrão. |
8 | NotificationCompat.Builder setDefaults (int defaults) Defina as opções de notificação padrão que serão usadas. |
9 | NotificationCompat.Builder setLargeIcon (Bitmap icon) Defina o ícone grande que é mostrado no ticker e na notificação. |
10 | NotificationCompat.Builder setNumber (int number) Defina o número grande no lado direito da notificação. |
11 | NotificationCompat.Builder setOngoing (boolean ongoing) Defina se esta é uma notificação em andamento. |
12 | NotificationCompat.Builder setSmallIcon (int icon) Defina o ícone pequeno para usar nos layouts de notificação. |
13 | NotificationCompat.Builder setStyle (NotificationCompat.Style style) Adicione um estilo de notificação rico a ser aplicado no momento da construção. |
14 | NotificationCompat.Builder setTicker (CharSequence tickerText) Defina o texto que é exibido na barra de status quando a notificação chega pela primeira vez. |
15 | NotificationCompat.Builder setVibrate (long[] pattern) Defina o padrão de vibração a ser usado. |
16 | NotificationCompat.Builder setWhen (long when) Defina a hora em que o evento ocorreu. As notificações no painel são classificadas por este tempo. |
Exemplo
O exemplo a seguir mostra a funcionalidade de uma notificação do Android usando um NotificationCompat.Builder Classe que foi introduzida no Android 4.1.
Degrau | Descrição |
---|---|
1 | Você usará o Android Studio IDE para criar um aplicativo Android e nomeá-lo como tutorialspoint em um pacote com.example.notificationdemo . |
2 | Modifique o arquivo src / MainActivity.java e adicione o código para notificar (""), se o usuário clicar no botão, ele chamará o serviço de notificação do Android. |
3 | Crie um novo arquivo Java src / NotificationView.java , que será usado para exibir o novo layout como parte de uma nova atividade que será iniciada quando o usuário clicar em qualquer uma das notificações |
4 | Modifique o arquivo XML de layout res / layout / activity_main.xml para adicionar o botão Notificação no layout relativo. |
5 | Crie um novo arquivo XML de layout res / layout / notification.xml . Isso será usado como arquivo de layout para uma nova atividade que começará quando o usuário clicar em qualquer uma das notificações. |
6 | Não há necessidade de alterar as constantes de string padrão. Android Studio cuida das constantes de string padrão |
7 | Execute o aplicativo para iniciar o emulador Android e verifique o resultado das alterações feitas no aplicativo. |
A seguir está o conteúdo do arquivo de atividade principal modificado src/com.example.notificationdemo/MainActivity.java. Este arquivo pode incluir cada um dos métodos fundamentais do ciclo de vida.
package com.example.notificationdemo;
import android.app.Activity;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity {
Button b1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1 = (Button)findViewById(R.id.button);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addNotification();
}
});
}
private void addNotification() {
NotificationCompat.Builder builder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.abc)
.setContentTitle("Notifications Example")
.setContentText("This is a test notification");
Intent notificationIntent = new Intent(this, MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(contentIntent);
// Add as notification
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(0, builder.build());
}
}
A seguir estará o conteúdo de res/layout/notification.xml arquivo -
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:layout_width="fill_parent"
android:layout_height="400dp"
android:text="Hi, Your Detailed notification view goes here...." />
</LinearLayout>
A seguir está o conteúdo do arquivo de atividade principal modificado src/com.example.notificationdemo/NotificationView.java.
package com.example.notificationdemo;
import android.os.Bundle;
import android.app.Activity;
public class NotificationView extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.notification);
}
}
A seguir estará o conteúdo de res/layout/activity_main.xml arquivo -
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="MainActivity">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Notification Example"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textSize="30dp" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tutorials point "
android:textColor="#ff87ff09"
android:textSize="30dp"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true"
android:layout_marginTop="48dp" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton"
android:src="@drawable/abc"
android:layout_below="@+id/textView2"
android:layout_centerHorizontal="true"
android:layout_marginTop="42dp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Notification"
android:id="@+id/button"
android:layout_marginTop="62dp"
android:layout_below="@+id/imageButton"
android:layout_centerHorizontal="true" />
</RelativeLayout>
A seguir estará o conteúdo de res/values/strings.xml para definir duas novas constantes -
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="action_settings">Settings</string>
<string name="app_name">tutorialspoint </string>
</resources>
A seguir está o conteúdo padrão de AndroidManifest.xml -
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.notificationdemo" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.notificationdemo.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".NotificationView"
android:label="Details of notification"
android:parentActivityName=".MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity"/>
</activity>
</application>
</manifest>
Vamos tentar executar o seu tutorialspointinscrição. Suponho que você tenha criado o seuAVDao fazer a configuração do ambiente. Para executar o APP do Android Studio, abra um dos arquivos de atividade do seu projeto e clique no ícone Executar na barra de ferramentas. O Android Studio instala o aplicativo em seu AVD e o inicia e, se tudo estiver certo com sua configuração e aplicativo, ele será exibido na janela do emulador seguinte
Agora clique button, você verá na parte superior uma mensagem "Alerta de nova mensagem!" será exibido momentaneamente e depois disso você terá a seguinte tela com um pequeno ícone no canto superior esquerdo.
Agora vamos expandir a visualização, dê um clique longo no ícone pequeno, depois de um segundo ele exibirá informações de data e este é o momento em que você deve arrastar a barra de status para baixo sem soltar o mouse. Você verá que a barra de status se expandirá e terá a seguinte tela -
Notificação do Big View
O fragmento de código a seguir demonstra como alterar a notificação criada no fragmento anterior para usar o estilo de visualização grande da Caixa de entrada. Vou atualizar o método de modificação displayNotification () para mostrar esta funcionalidade -
protected void displayNotification() {
Log.i("Start", "notification");
/* Invoking the default notification service */
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
mBuilder.setContentTitle("New Message");
mBuilder.setContentText("You've received new message.");
mBuilder.setTicker("New Message Alert!");
mBuilder.setSmallIcon(R.drawable.woman);
/* Increase notification number every time a new notification arrives */
mBuilder.setNumber(++numMessages);
/* Add Big View Specific Configuration */
NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
String[] events = new String[6];
events[0] = new String("This is first line....");
events[1] = new String("This is second line...");
events[2] = new String("This is third line...");
events[3] = new String("This is 4th line...");
events[4] = new String("This is 5th line...");
events[5] = new String("This is 6th line...");
// Sets a title for the Inbox style big view
inboxStyle.setBigContentTitle("Big Title Details:");
// Moves events into the big view
for (int i=0; i < events.length; i++) {
inboxStyle.addLine(events[i]);
}
mBuilder.setStyle(inboxStyle);
/* Creates an explicit intent for an Activity in your app */
Intent resultIntent = new Intent(this, NotificationView.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(NotificationView.class);
/* Adds the Intent that starts the Activity to the top of the stack */
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent =stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(resultPendingIntent);
mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
/* notificationID allows you to update the notification later on. */
mNotificationManager.notify(notificationID, mBuilder.build());
}
Agora, se você tentar executar seu aplicativo, encontrará o seguinte resultado na forma expandida da visualização -