Android - การแจ้งเตือน

notificationเป็นข้อความที่คุณสามารถแสดงต่อผู้ใช้ภายนอก UI ปกติของแอปพลิเคชันของคุณ เมื่อคุณแจ้งให้ระบบออกการแจ้งเตือนระบบจะแสดงเป็นไอคอนในพื้นที่แจ้งเตือนก่อน หากต้องการดูรายละเอียดของการแจ้งเตือนผู้ใช้จะเปิดลิ้นชักการแจ้งเตือน ทั้งพื้นที่แจ้งเตือนและลิ้นชักการแจ้งเตือนเป็นพื้นที่ที่ระบบควบคุมซึ่งผู้ใช้สามารถดูได้ตลอดเวลา

Android Toast คลาสเป็นวิธีที่สะดวกในการแสดงการแจ้งเตือนผู้ใช้ แต่ปัญหาคือการแจ้งเตือนเหล่านี้ไม่คงอยู่ซึ่งหมายความว่าการแจ้งเตือนจะกะพริบบนหน้าจอเป็นเวลาสองสามวินาทีจากนั้นจะหายไป

หากต้องการดูรายละเอียดของการแจ้งเตือนคุณจะต้องเลือกไอคอนซึ่งจะแสดงลิ้นชักการแจ้งเตือนที่มีรายละเอียดเกี่ยวกับการแจ้งเตือน ในขณะที่ทำงานกับโปรแกรมจำลองกับอุปกรณ์เสมือนคุณจะต้องคลิกและลากแถบสถานะลงมาเพื่อขยายซึ่งจะให้รายละเอียดดังนี้ นี่จะเป็นเพียง64 dp สูงและเรียกว่ามุมมองปกติ

รูปแบบขยายด้านบนสามารถมีไฟล์ Big Viewซึ่งจะมีรายละเอียดเพิ่มเติมเกี่ยวกับการแจ้งเตือน คุณสามารถเพิ่มบรรทัดเพิ่มเติมได้ไม่เกินหกบรรทัดในการแจ้งเตือน ภาพหน้าจอต่อไปนี้แสดงการแจ้งเตือนดังกล่าว

สร้างและส่งการแจ้งเตือน

คุณมีวิธีง่ายๆในการสร้างการแจ้งเตือน ทำตามขั้นตอนต่อไปนี้ในแอปพลิเคชันของคุณเพื่อสร้างการแจ้งเตือน -

ขั้นตอนที่ 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 - แนบการดำเนินการ

นี่เป็นส่วนเสริมและจำเป็นหากคุณต้องการแนบการดำเนินการกับการแจ้งเตือน การดำเนินการช่วยให้ผู้ใช้สามารถเปลี่ยนจากการแจ้งเตือนไปยังไฟล์Activity ในแอปพลิเคชันของคุณซึ่งพวกเขาสามารถดูเหตุการณ์อย่างน้อยหนึ่งเหตุการณ์หรือทำงานเพิ่มเติมได้

การกระทำถูกกำหนดโดยไฟล์ PendingIntent มีไฟล์ Intentที่เริ่มกิจกรรมในแอปพลิเคชันของคุณ หากต้องการเชื่อมโยง PendingIntent กับท่าทางให้เรียกใช้วิธีการNotificationCompat.Builder ที่เหมาะสม ตัวอย่างเช่นหากคุณต้องการเริ่มกิจกรรมเมื่อผู้ใช้คลิกข้อความแจ้งเตือนในลิ้นชักการแจ้งเตือนคุณเพิ่ม PendingIntent โดยการโทรsetContentIntent().

วัตถุ PendingIntent ช่วยให้คุณดำเนินการในนามแอปพลิเคชันของคุณได้บ่อยครั้งในภายหลังโดยไม่สนใจว่าแอปพลิเคชันของคุณกำลังทำงานอยู่หรือไม่

เราใช้ความช่วยเหลือของ stack builder object ซึ่งจะมี back stack เทียมสำหรับกิจกรรมที่เริ่มต้น เพื่อให้แน่ใจว่าการนำทางย้อนกลับจากกิจกรรมจะนำออกจากแอปพลิเคชันของคุณไปยังหน้าจอหลัก

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 - ออกการแจ้งเตือน

สุดท้ายคุณส่งวัตถุการแจ้งเตือนไปยังระบบโดยเรียกใช้ NotificationManager.notify () เพื่อส่งการแจ้งเตือนของคุณ อย่าลืมโทรNotificationCompat.Builder.build()วิธีการสร้างวัตถุก่อนที่จะแจ้งให้ทราบ วิธีนี้จะรวมตัวเลือกทั้งหมดที่ตั้งค่าไว้และส่งคืนค่าใหม่Notification วัตถุ.

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

ซีเนียร์ ค่าคงที่และคำอธิบาย
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 สตูดิโอ 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 ใหม่ความละเอียด / รูปแบบ / 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ในขณะที่ทำการตั้งค่าสภาพแวดล้อม ในการเรียกใช้ APP จาก Android Studio ให้เปิดไฟล์กิจกรรมของโครงการแล้วคลิก

ไอคอนเรียกใช้จากแถบเครื่องมือ Android Studio ติดตั้งแอปบน AVD ของคุณและเริ่มการทำงานและหากทุกอย่างเรียบร้อยดีกับการตั้งค่าและแอปพลิเคชันของคุณแอปจะแสดงหน้าต่าง Emulator ตามมา -

ตอนนี้คลิก buttonคุณจะเห็นข้อความ "New Message Alert!" ที่ด้านบน จะแสดงในไม่ช้าและหลังจากนั้นคุณจะมีหน้าจอต่อไปนี้โดยมีไอคอนเล็ก ๆ ที่มุมบนซ้าย

ตอนนี้ให้ขยายมุมมองคลิกยาวที่ไอคอนขนาดเล็กหลังจากผ่านไปหนึ่งวินาทีมันจะแสดงข้อมูลวันที่และนี่คือเวลาที่คุณควรลากแถบสถานะลงโดยไม่ปล่อยเมาส์ คุณจะเห็นแถบสถานะจะขยายและคุณจะได้รับหน้าจอต่อไปนี้ -

การแจ้งเตือน Big View

ข้อมูลโค้ดต่อไปนี้แสดงให้เห็นถึงวิธีแก้ไขการแจ้งเตือนที่สร้างขึ้นในข้อมูลโค้ดก่อนหน้าเพื่อใช้สไตล์มุมมองขนาดใหญ่ของกล่องจดหมายเข้า ฉันจะอัปเดตวิธีการปรับเปลี่ยน 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());
}

ตอนนี้ถ้าคุณจะพยายามเรียกใช้แอปพลิเคชันของคุณคุณจะพบผลลัพธ์ต่อไปนี้ในรูปแบบขยายของมุมมอง -