android中使用通知功能


本文實現一個功能:點擊一個按鈕,發送一個系統通知功能

添加一個Activity

 

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Main36Activity">

    <Button
        android:id="@+id/button40"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="顯示通知" />
</android.support.constraint.ConstraintLayout>

 

 

MainActivity.java:

 1 package com.example.chenrui.app1;
 2 
 3 import android.app.Notification;
 4 import android.app.NotificationChannel;
 5 import android.app.NotificationManager;
 6 import android.graphics.BitmapFactory;
 7 import android.os.Build;
 8 import android.support.v4.app.NotificationCompat;
 9 import android.support.v7.app.AppCompatActivity;
10 import android.os.Bundle;
11 import android.view.View;
12 import android.widget.Button;
13 
14 public class MainActivity extends AppCompatActivity {
15 
16     @Override
17     protected void onCreate(Bundle savedInstanceState) {
18         super.onCreate(savedInstanceState);
19         setContentView(R.layout.activity_main);
20 
21         Button button = findViewById(R.id.button1);
22         button.setOnClickListener(new View.OnClickListener() {
23             @Override
24                 public void onClick(View v) {
25                 NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
26 
27                 String channelId = "app1";
28                 if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.O) {
29                     NotificationChannel channel = new NotificationChannel(channelId,"app1",NotificationManager.IMPORTANCE_DEFAULT);
30                     manager.createNotificationChannel(channel);
31                 }
32 
33                 Notification notification = new NotificationCompat.Builder(MainActivity.this,channelId)
34                         .setContentTitle("通知標題")
35                         .setContentText("通知正文")
36                         .setWhen(System.currentTimeMillis())
37                         .setSmallIcon(R.mipmap.ic_launcher)
38                         .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
39                         .build();
40                 manager.notify(1,notification);
41             }
42         });
43     }
44 }

 

注意第28-31行的代碼,Android8.0及以上版本,要發送通知,需要配置通知頻道,不然無法成功發送通知。

上面的通知,在點擊的時候,不會有任何反應,下面我們把代碼修改一下,允許在點擊的時候進入一個Activity活動,注意紅色字體為新增的代碼:

 1 package com.example.chenrui.app1;
 2 
 3 import android.app.Notification;
 4 import android.app.NotificationChannel;
 5 import android.app.NotificationManager;
 6 import android.app.PendingIntent;
 7 import android.content.Intent;
 8 import android.graphics.BitmapFactory;
 9 import android.os.Build;
10 import android.support.v4.app.NotificationCompat;
11 import android.support.v7.app.AppCompatActivity;
12 import android.os.Bundle;
13 import android.view.View;
14 import android.widget.Button;
15 
16 public class MainActivity extends AppCompatActivity {
17 
18     @Override
19     protected void onCreate(Bundle savedInstanceState) {
20         super.onCreate(savedInstanceState);
21         setContentView(R.layout.activity_main);
22 
23         Button button = findViewById(R.id.button1);
24         button.setOnClickListener(new View.OnClickListener() {
25             @Override
26                 public void onClick(View v) {
27                 NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
28 
29                 String channelId = "app1";
30                 if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.O) {
31                     NotificationChannel channel = new NotificationChannel(channelId,"app1",NotificationManager.IMPORTANCE_DEFAULT);
32                     manager.createNotificationChannel(channel);
33                 }
34 
35                 Intent intent = new Intent(MainActivity.this,Main2Activity.class);
36                 PendingIntent pi = PendingIntent.getActivity(MainActivity.this,0,intent,0);
37 
38                 Notification notification = new NotificationCompat.Builder(Main2Activity.this,channelId)
39                         .setContentTitle("通知標題")
40                         .setContentText("通知正文")
41                         .setWhen(System.currentTimeMillis())
42                         .setSmallIcon(R.mipmap.ic_launcher)
43                         .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
44                         .setContentIntent(pi)
45                         .setAutoCancel(true)
46                         .build();
47                 manager.notify(1,notification);
48             }
49         });
50     }
51 }

PendingIntent可以理解為一種延時執行的Intent,當點擊通知項的時候進入到對應的Activity中。

 

更多屬性的使用:

.setDefaults(NotificationCompat.DEFAULT_ALL)

使用通知的默認效果,這個屬性會根據當前手機的環境決定播放什么鈴聲,以及如何震動等

 

.setPriority(NotificationCompat.PRIORITY_MAX)

設置通知的優先級,設置為NotificationCompat.PRIORITY_MAX是最高級,會以橫幅的方式顯示通知,部分手機可能禁用了橫幅通知,需要手工開啟

 

.setStyle(new NotificationCompat.BigTextStyle().bigText("通知內容"))

如果內容過多的話,默認會顯示成省略號,如果要顯示大文本信息,可以使用setStyle,用於顯示大文本


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM