Статьи

Руководство по уведомлению Android Jelly Bean

Возможно, вы слышали об Android Jelly Bean (уровень API 16). Google улучшил множество функций и представил новые функции. Одним из них является уведомление. Теперь они сделали уведомление более универсальным, введя мультимедийное уведомление. Google разработал три специальных стиля уведомлений, которые упомянуты ниже. Даже разработчик может написать собственный настроенный стиль уведомлений с помощью удаленного просмотра. Старый конструктор класса Notification устарел, и была введена новая и улучшенная версия Notification.

Тип уведомления:

  • Основные уведомления — показывает простые и короткие уведомления со значком.
  • Big Picture Notification — показывает визуальный контент, такой как растровое изображение.
  • Большое Текстовое Уведомление — Показывает многострочный объект Textview.
  • Inbox Style Notification — показывает любой вид списка, например сообщения, заголовок и т. Д.

Старый синтаксис требует, чтобы мы создали объект уведомления, но теперь Android использует шаблон компоновщика для создания объекта уведомления. Класс Notification.Builder был введен для облегчения этой задачи. Этот класс возвращает объект построителя, который настраивается в соответствии с вашими требованиями. Вспомогательные классы были введены как Notification.BigPictureStyle, Notification.BigTextStyle и Notification.InboxStyle . Эти классы являются классами перестроителей, которые берут объект, созданный классом Notification.Builder, и изменяют поведение следующим образом.

Информация о проекте: метаданные о проекте.

Версия платформы: Android API Level 16.
IDE: Eclipse Helios Service Release 2
Эмулятор: Android 4.1 (API 16)

Предварительное условие: предварительное знание инфраструктуры приложений Android и Intent.

Сначала создайте проект с помощью Eclipse> Файл> Новый проект> Проект приложения Android . Появится следующее диалоговое окно. Заполните обязательные поля, например, Имя приложения, Имя проекта и Имя пакета. Не забудьте выбрать версию Build SDK (для этого урока был выбран Google API 16). Теперь нажмите следующую кнопку.

Когда появится диалоговое окно, выберите BlankActivity и нажмите кнопку « Далее» .

Заполните Имя файла деятельности и Имя файла макета для диалогового окна, показанного ниже, и нажмите кнопку Готово.

Этот процесс настроит основные файлы проекта. Теперь мы собираемся добавить четыре кнопки в файле activity_main.xml . Вы можете изменить файл макета, используя графический редактор макетов или XML-редактор. Содержимое файла должно выглядеть следующим образом.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<LinearLayout 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:orientation="vertical"
    android:gravity="center_horizontal">
 
    <Button
        android:id="@+id/btBasicNotification"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal|center_vertical"
        android:onClick="sendBasicNotification"
        android:text="@string/btBasicNotification"
        android:background="@drawable/button_background"
        android:textColor="#000000"
        />
    <Button
        android:id="@+id/btBigTextNotification"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal|center_vertical"
        android:onClick="sendBigTextStyleNotification"
        android:text="@string/btBigTextNotification"
        android:background="@drawable/button_background"
        android:textColor="#000000"
        />
   <Button
        android:id="@+id/btBigPictureNotification"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal|center_vertical"
        android:onClick="sendBigPictureStyleNotification"
        android:text="@string/btBigPictureNotification"
        android:background="@drawable/button_background"
        android:textColor="#000000" />
   <Button
        android:id="@+id/btInboxStyleNotification"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal|center_vertical"
        android:onClick="sendInboxStyleNotification"
        android:text="@string/btInboxStyleNotification"
        android:background="@drawable/button_background"
        android:textColor="#000000"/>
</LinearLayout>

Возможно, вы заметили, что методы onClick связаны с соответствующими кнопками. Если вы не знаете, как определить и использовать фоновый файл для просмотра, тогда игнорируйте поле android: background . Теперь мы собираемся определить методы sendBasicNotification, sendBigTextStyleNotification, sendBigPictureStyleNotification и sendInboxStyleNotification. Как следует из названия метода, он отправляет именно этот вид уведомления. В каждом методе мы создаем объект Notification.Builder и настраиваем объект. Здесь шаблон конструктора был использован для настройки объекта. После завершения настройки вызовите метод build (), чтобы получить объект уведомления. В этой новой системе уведомлений с уведомлением может быть связано не более трех действий, которые отображаются под содержанием уведомления. Это может быть достигнуто путем вызова метода addAction () для объекта компоновщика. Столько же значков вы увидите в уведомлении, сколько вы заметите для метода sendBigPictureStyleNotifcation (). Приоритет уведомления также может быть установлен путем вызова метода setPriority (), как показано в методе sendBigTextStyleNotification (). В приведенном ниже коде намерение было использовано для вызова функции HandleNotificationActivity.

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
package com.example.jellybeannotificationexample;
 
import android.app.Activity;
import android.app.Notification;
import android.app.Notification.Builder;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
 
public class NotificationMainActivity extends Activity {
 
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
 }
 
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  getMenuInflater().inflate(R.menu.activity_main, menu);
  return true;
 }
 
 public void sendBasicNotification(View view) {
  Notification notification = new Notification.Builder(this)
    .setContentTitle("Basic Notification")
    .setContentText("Basic Notification, used earlier")
    .setSmallIcon(R.drawable.ic_launcher_share).build();
  notification.flags |= Notification.FLAG_AUTO_CANCEL;
  NotificationManager notificationManager = getNotificationManager();
  notificationManager.notify(0, notification);
 }
 
 public void sendBigTextStyleNotification(View view) {
  String msgText = "Jeally Bean Notification example!! "
    + "where you will see three different kind of notification. "
    + "you can even put the very long string here.";
 
  NotificationManager notificationManager = getNotificationManager();
  PendingIntent pi = getPendingIntent();
  Builder builder = new Notification.Builder(this);
  builder.setContentTitle("Big text Notofication")
    .setContentText("Big text Notification")
    .setSmallIcon(R.drawable.ic_launcher)
    .setAutoCancel(true);
    .setPriority(Notification.PRIORITY_HIGH)
    .addAction(R.drawable.ic_launcher_web, "show activity", pi);
  Notification notification = new Notification.BigTextStyle(builder)
    .bigText(msgText).build();
  
  notificationManager.notify(0, notification);
 }
 
 public void sendBigPictureStyleNotification(View view) {
  PendingIntent pi = getPendingIntent();
  Builder builder = new Notification.Builder(this);
  builder.setContentTitle("BP notification")
    // Notification title
    .setContentText("BigPicutre notification")
    // you can put subject line.
    .setSmallIcon(R.drawable.ic_launcher)
    // Set your notification icon here.
    .addAction(R.drawable.ic_launcher_web, "show activity", pi)
    .addAction(
      R.drawable.ic_launcher_share,
      "Share",
      PendingIntent.getActivity(getApplicationContext(), 0,
        getIntent(), 0, null));
 
  // Now create the Big picture notification.
  Notification notification = new Notification.BigPictureStyle(builder)
    .bigPicture(
      BitmapFactory.decodeResource(getResources(),
        R.drawable.big_picture)).build();
  // Put the auto cancel notification flag
  notification.flags |= Notification.FLAG_AUTO_CANCEL;
  NotificationManager notificationManager = getNotificationManager();
  notificationManager.notify(0, notification);
 }
 
 public void sendInboxStyleNotification(View view) {
  PendingIntent pi = getPendingIntent();
  Builder builder = new Notification.Builder(this)
    .setContentTitle("IS Notification")
    .setContentText("Inbox Style notification!!")
    .setSmallIcon(R.drawable.ic_launcher)
    .addAction(R.drawable.ic_launcher_web, "show activity", pi);
 
  Notification notification = new Notification.InboxStyle(builder)
    .addLine("First message").addLine("Second message")
    .addLine("Thrid message").addLine("Fourth Message")
    .setSummaryText("+2 more").build();
  // Put the auto cancel notification flag
  notification.flags |= Notification.FLAG_AUTO_CANCEL;
  NotificationManager notificationManager = getNotificationManager();
  notificationManager.notify(0, notification);
 }
 
 public PendingIntent getPendingIntent() {
  return PendingIntent.getActivity(this, 0, new Intent(this,
    HandleNotificationActivity.class), 0);
 }
 
 public NotificationManager getNotificationManager() {
  return (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
 }
}

Мы определили базовую HandleNotificationActivity, которая просто показывает простое сообщение, когда намерение запускается для этого действия. Содержание файла выглядит следующим образом.

01
02
03
04
05
06
07
08
09
10
11
12
13
package com.example.jellybeannotificationexample;
 
import android.app.Activity;
import android.os.Bundle;
 
public class HandleNotificationActivity extends Activity {
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.handle_notification_activity);
 }
}

Соответствующий файл макета (handle_notification_activity.xml) приведен ниже.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
     android:gravity="center_horizontal|center_vertical" >
 
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/tvHandleNotification"
        android:textSize="20dp"
        android:textStyle="bold|italic" />
 
</LinearLayout>

Теперь вам нужно определить файл манифеста Android. Функция HandleNotificationActivity должна быть включена в файл манифеста, а затем поместить фильтр намерений для эта деятельность.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    package="com.example.jellybeannotificationexample"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="16" />
 
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name">
        <activity
            android:name=".NotificationMainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".HandleNotificationActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
 
</manifest>

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

Большой текстовый стиль
заявка
Входящие Стиль
Большой стиль изображения
Основное уведомление

Если вам интересно узнать больше об исходном коде, вы можете найти его здесь .

Ссылка: Учебник по новому уведомлению Android Jelly Bean от нашего партнера JCG Ракеша Кусата в блоге Code4Reference .