【例4-2】在状态栏显示系统通知
系统通知服务(Notification)是具有全局效果的通知,在手机的通知栏显示。我们在应用程序向系统发出通知,它先以图标的形式显示在通知栏中,用户下拉通知栏可以查看通知的详细信息。Notification提供了文字、声音和振动等属性。

教学视频
布局文件notification.xml的源代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:layout_marginTop="50dp"
android:layout_marginLeft="20dp" >
<TextView
android:id="@+id/txt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=""
android:textSize="24sp"/>
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发送系统通知"
android:textSize="20sp" />
<Button
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="删除通知"
android:textSize="20sp" />
</LinearLayout>
控制文件NotificationActivity.java源代码
package com.example.chap04;
import android.app.Activity;
import android.app.NotificationChannel;
import android.app.NotificationManager;;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import androidx.core.app.NotificationCompat;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
//【例4-2】在状态栏显示系统通知服务。
public class NotificationActivity extends Activity implements OnClickListener
{
NotificationManager nManager;
Button btn1, btn2;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.notification);
String service = NOTIFICATION_SERVICE;
nManager= (NotificationManager)getSystemService(service);
btn1=(Button)findViewById(R.id.btn1);
btn1.setOnClickListener(this);
btn2=(Button)findViewById(R.id.btn2);
btn2.setOnClickListener(this);
}
@Override
public void onClick(View arg0)
{
if(arg0==btn1)
showNotification(this);
else if(arg0==btn2)
nManager.cancelAll();
}
/**
* 显示一个普通的通知
*/
public void showNotification(Context context) {
//高版本需要在系统设置里开启渠道"channel",notification才能正常弹出
if(Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O){
NotificationChannel notificationChannel = new NotificationChannel(
"channel-id",
"channel-name",
NotificationManager.IMPORTANCE_HIGH);
nManager.createNotificationChannel(notificationChannel);
}
//高版本在Builder()多加了一个参数channelId
NotificationCompat.Builder builder = new NotificationCompat.Builder(context,"channel-id");
builder.setSmallIcon(R.drawable.ic_con2) //设置小图标
.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_con))//设置大图标
.setContentTitle("这是一个通知的标题")
.setContentText("这是一个通知的内容这是一个通知的内容")
.setWhen(System.currentTimeMillis()) //通知产生的时间
.setAutoCancel(true);//可取消
Notification notification= builder.build();
nManager.notify(0,notification);
}
打开项目配置文件AndroidManifest.xml,配置要启动的Activity类名
<activity android:name=".NotificationActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

