Полезные примеры Android

Полезные примеры Android
Android — Уведомления

Уведомление является сообщением , которое можно отобразить на пользователь за пределы нормального пользовательского интерфейса приложения. Когда вы говорите системе, что нужно отправить уведомление, оно сначала появляется в виде значка в области уведомлений. Чтобы просмотреть подробную информацию об уведомлении, пользователь открывает панель уведомлений. И область уведомлений, и панель уведомлений — это области, контролируемые системой, которые пользователь может просматривать в любое время.

Класс Android Toast предоставляет удобный способ отображения предупреждений пользователей, но проблема в том, что эти предупреждения не являются постоянными, что означает, что предупреждение мигает на экране в течение нескольких секунд, а затем исчезает.

Панель уведомлений Android

Чтобы просмотреть подробную информацию об уведомлении, вам нужно будет выбрать значок, который будет отображать панель уведомлений с подробными сведениями об уведомлении. При работе с эмулятором с виртуальным устройством вам нужно будет щелкнуть и перетащить строку состояния вниз, чтобы развернуть ее, что даст вам следующие подробности. Это будет всего лишь 64 dp в высоту и называется нормальным видом.

Сведения об уведомлениях Android

Над развернутой формой может быть большой вид, в котором будут дополнительные сведения об уведомлении. В уведомление можно добавить до шести дополнительных строк. На следующем снимке экрана показано такое уведомление.

Создание и отправка уведомлений

У вас есть простой способ создать уведомление. Выполните следующие шаги в своем приложении, чтобы создать уведомление —

Шаг 1. Создайте конструктор уведомлений

В качестве первого шага необходимо создать конструктор уведомлений с помощью NotificationCompat.Builder.build () . Вы будете использовать конструктор уведомлений для установки различных свойств уведомлений, таких как маленькие и большие значки, заголовок, приоритет и т. Д.

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)

Шаг 2 — Настройка свойств уведомления

Если у вас есть объект Builder , вы можете установить его свойства уведомления с помощью объекта Builder в соответствии с вашими требованиями. Но это обязательно, чтобы установить как минимум следующее —

  • Маленький значок, установленный setSmallIcon ()

  • Заголовок, установленный setContentTitle ()

  • Подробный текст, установленный setContentText ()

mBuilder.setSmallIcon(R.drawable.notification_icon);
mBuilder.setContentTitle("Notification Alert, Click Me!");
mBuilder.setContentText("Hi, This is Android Notification Detail!");

У вас есть множество дополнительных свойств, которые вы можете установить для своего уведомления. Чтобы узнать о них больше, см. Справочную документацию по NotificationCompat.Builder.

Шаг 3 — Прикрепите действия

Это необязательная часть, необходимая, если вы хотите прикрепить действие к уведомлению. Действие позволяет пользователям перейти непосредственно из уведомления на операцию в приложении, где они могут посмотреть на одного или нескольких событий или сделать дальнейшую работу.

Действие определяется PendingIntent, содержащим намерение , запускающее действие в вашем приложении. Чтобы связать PendingIntent с жестом, вызовите соответствующий метод NotificationCompat.Builder . Например, если вы хотите запустить Activity, когда пользователь щелкает текст уведомления в ящике уведомлений, вы добавляете PendingIntent, вызывая setContentIntent () .

Объект PendingIntent помогает вам выполнять действие от имени ваших приложений, часто в более позднее время, не заботясь о том, запущено ли ваше приложение или нет.

Воспользуемся помощью объекта stack builder, который будет содержать искусственный задний стек для запущенного Activity. Это гарантирует, что переход назад от Activity приведет к выходу из приложения на главный экран.

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

Шаг 4 — Отправьте уведомление

Наконец, вы передаете объект Notification системе, вызывая NotificationManager.notify () для отправки вашего уведомления. Убедитесь, что вы вызываете метод NotificationCompat.Builder.build () для объекта построителя перед его уведомлением. Этот метод объединяет все заданные параметры и возвращает новый объект уведомления .

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// notificationID allows you to update the notification later on.
mNotificationManager.notify(notificationID, mBuilder.build());

Класс NotificationCompat.Builder

Класс NotificationCompat.Builder позволяет упростить управление всеми флагами, а также помогает создавать типичные макеты уведомлений. Ниже приведены несколько важных и наиболее часто используемых методов, доступных как часть класса NotificationCompat.Builder.

Sr.No. Константы и описание
1

Notification build()

Объедините все заданные параметры и верните новый объект уведомления.

2

NotificationCompat.Builder setAutoCancel (boolean autoCancel)

Установка этого флага приведет к тому, что уведомление будет автоматически отменено, когда пользователь щелкнет его на панели.

3

NotificationCompat.Builder setContent (RemoteViews views)

Предоставьте пользовательский RemoteViews для использования вместо стандартного.

4

NotificationCompat.Builder setContentInfo (CharSequence info)

Установите крупный текст в правой части уведомления.

5

NotificationCompat.Builder setContentIntent (PendingIntent intent)

Предоставьте PendingIntent для отправки при нажатии на уведомление.

6

NotificationCompat.Builder setContentText (CharSequence text)

Задайте текст (вторая строка) уведомления в стандартном уведомлении.

7

NotificationCompat.Builder setContentTitle (CharSequence title)

Задайте текст (первая строка) уведомления в стандартном уведомлении.

8

NotificationCompat.Builder setDefaults (int defaults)

Установите параметры уведомлений по умолчанию, которые будут использоваться.

9

NotificationCompat.Builder setLargeIcon (Bitmap icon)

Установите большой значок, который будет отображаться в тикере и уведомлении.

10

NotificationCompat.Builder setNumber (int number)

Установите большое число в правой части уведомления.

11

NotificationCompat.Builder setOngoing (boolean ongoing)

Установите, является ли это постоянным уведомлением.

12

NotificationCompat.Builder setSmallIcon (int icon)

Установите маленький значок для использования в макетах уведомлений.

13

NotificationCompat.Builder setStyle (NotificationCompat.Style style)

Добавьте богатый стиль уведомлений, который будет применяться во время сборки.

14

NotificationCompat.Builder setTicker (CharSequence tickerText)

Установите текст, который будет отображаться в строке состояния при первом поступлении уведомления.

15

NotificationCompat.Builder setVibrate (long[] pattern)

Установите шаблон вибрации для использования.

16

NotificationCompat.Builder setWhen (long when)

Установите время, когда произошло событие. Уведомления в панели отсортированы по этому времени.

Пример

В следующем примере показана функциональность уведомления Android с использованием класса NotificationCompat.Builder , представленного в Android 4.1.

Шаг Описание
1 Вы будете использовать Android Studio IDE для создания Android-приложения и назовете его как tutorialspoint в пакете com.example.notificationdemo .
2 Измените файл src / MainActivity.java и добавьте код для уведомления («»), если пользователь нажмет на кнопку, он вызовет службу уведомлений Android.
3 Создайте новый файл Java src / NotificationView.java , который будет использоваться для отображения нового макета как части нового действия, которое будет запущено, когда пользователь щелкнет любое из уведомлений.
4 Измените XML-файл макета res / layout / activity_main.xml, чтобы добавить кнопку уведомления в относительном макете.
5 Создайте новый XML-файл макета res / layout / notification.xml . Он будет использоваться в качестве файла макета для нового действия, которое начнется, когда пользователь щелкнет любое из уведомлений.
6 Нет необходимости изменять строковые константы по умолчанию. Студия Android позаботится о строковых константах по умолчанию
7 Запустите приложение, чтобы запустить эмулятор Android и проверить результат изменений, внесенных в приложение.

Ниже приводится содержимое измененного файла основного действия src / com.example.notificationdemo / MainActivity.java . Этот файл может включать каждый из основных методов жизненного цикла.

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

Ниже будет содержимое файла res / layout / notification.xml

<?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>

Ниже приводится содержимое измененного файла основного действия 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);
}
}

Ниже будет содержимое файла res / layout / activity_main.xml

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

Ниже будет содержимое файла res / values ​​/ strings.xml для определения двух новых констант:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="action_settings">Settings</string>
<string name="app_name">tutorialspoint </string>  
</resources>

Ниже содержание по умолчанию 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>

Попробуем запустить ваше приложение tutorialspoint . Я предполагаю, что вы создали свой AVD при настройке среды. Чтобы запустить приложение из Android Studio, откройте один из файлов активности вашего проекта и щелкните Значок запуска Eclipseзначок « Выполнить» на панели инструментов. Android Studio устанавливает приложение на ваш AVD и запускает его, и, если с вашей настройкой и приложением все в порядке, оно отобразит следующее окно эмулятора —

Запуск уведомлений Android

Теперь нажмите кнопку , вверху вы увидите сообщение «Уведомление о новом сообщении!». на мгновение отобразится, и после этого вы увидите следующий экран с маленьким значком в верхнем левом углу.

Теперь давайте развернем представление, нажмите и удерживайте маленький значок, через секунду он отобразит информацию о дате, и это время, когда вы должны перетащить строку состояния вниз, не отпуская мыши. Вы увидите, что строка состояния расширится, и вы получите следующий экран —

Уведомление Android расширено

Уведомление о большом просмотре

В следующем фрагменте кода показано, как изменить уведомление, созданное в предыдущем фрагменте, для использования стиля большого представления папки «Входящие». Я собираюсь обновить метод модификации displayNotification (), чтобы показать эту функциональность —

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

Теперь, если вы попытаетесь запустить свое приложение, вы увидите следующий результат в развернутой форме представления:

Select the fields to be shown. Others will be hidden. Drag and drop to rearrange the order.
  • Image
  • SKU
  • Rating
  • Price
  • Stock
  • Availability
  • Add to cart
  • Description
  • Content
  • Weight
  • Dimensions
  • Additional information
  • Attributes
  • Custom attributes
  • Custom fields
Click outside to hide the compare bar
Compare