Android 8.0系统引入了通知渠道,每一条通知都属于一个对应的渠道。
每个应用程序都可以自由地创建当前应用拥有哪些通知渠道,用户可以自由的选择这些通知渠道的重要程度,是否响铃、是否振动、关闭渠道的通知等操作。
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.graphics.BitmapFactory;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 创建 NotificationManager
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// 渠道ID
String channelID = "normal";
// 渠道名称
String channelName = "Normal";
// 重要等级 importANCE_MIN、importANCE_LOW、importANCE_DEFAULT、importANCE_HIGH
int importance = NotificationManager.importANCE_DEFAULT;
// Android 8.0 引入通知渠道,故需要进行判断
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) {
// 创建通知渠道
NotificationChannel channel = new NotificationChannel(channelID, channelName, importance);
manager.createNotificationChannel(channel);
}
// 使用 NotificationCompat 的构造器创建 Notification 对象
Notification notification = new NotificationCompat.Builder(this, channelID) // 渠道ID
.setContentTitle("this is title.") // 通知的标题
.setContentText("this is text.") // 通知的内容
.setSmallIcon(R.drawable.ic_launcher_foreground) // 通知的小图标,显示在系统状态栏上
.setLargeIcon(BitmapFactory.decodeResource(getResources(),
R.drawable.ic_launcher_foreground)) // 通知的大图标,下拉系统状态栏时看到
.build();
// 通知
findViewById(R.id.send_bt).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 通知 第一个参数:id,每次传入的id都要不同;第二个参数:Notification对象
manager.notify(1, notification);
}
});
// 取消通知
findViewById(R.id.cancel_bt).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
manager.cancel(1);
}
});
}
}
处理通知点击事件 - PendingIntent
点击通知跳转到 指定的Activity,并取消点击的通知。
// 创建 PendingIntent 对象,用于处理点击事件 跳转到 MainActivity2
Intent intent = new Intent(this, MainActivity2.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
// 使用 NotificationCompat 的构造器创建 Notification 对象
Notification notification = new NotificationCompat.Builder(this, channelID) // 渠道ID
.setContentTitle("this is title.") // 通知的标题
.setContentText("this is text.") // 通知的内容
.setSmallIcon(R.drawable.ic_launcher_foreground) // 通知的小图标,显示在系统状态栏上
.setLargeIcon(BitmapFactory.decodeResource(getResources(),
R.drawable.ic_launcher_foreground)) // 通知的大图标,下拉系统状态栏时看到
.setContentIntent(pendingIntent) // 点击时触发的行为
.setAutoCancel(true) // 点击后,通知取消,如果没有,就算点击了,还是显示在通知栏
.build();
当通知内容过长时,显示完整内容 - setStyle
使用 setStyle 代替 setContentText
Notification notification = new NotificationCompat.Builder(this, channelID) // 渠道ID
.setContentTitle("this is title.") // 通知的标题
// .setContentText("你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好" +
// "你好你好你好你好你好你好你好你好你好你好你好你好你好你好") // 通知的内容
.setStyle(new NotificationCompat.BigTextStyle().bigText("你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好" +
"你好你好你好你好你好你好你好你好你好你好你好你好你好你好"))
.setSmallIcon(R.drawable.ic_launcher_foreground) // 通知的小图标,显示在系统状态栏上
.setLargeIcon(BitmapFactory.decodeResource(getResources(),
R.drawable.ic_launcher_foreground)) // 通知的大图标,下拉系统状态栏时看到
.setContentIntent(pendingIntent)
.setAutoCancel(true) // 点击后,通知取消,如果没有,就算点击了,还是显示在通知栏
.build();
替换前:
替换后:
Notification notification = new NotificationCompat.Builder(this, channelID) // 渠道ID
.setContentTitle("this is title.") // 通知的标题
.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(
BitmapFactory.decodeResource(getResources(), R.drawable.apple))) // 图片
.setSmallIcon(R.drawable.ic_launcher_foreground) // 通知的小图标,显示在系统状态栏上
.setLargeIcon(BitmapFactory.decodeResource(getResources(),
R.drawable.ic_launcher_foreground)) // 通知的大图标,下拉系统状态栏时看到
.setContentIntent(pendingIntent)
.setAutoCancel(true) // 点击后,通知取消,如果没有,就算点击了,还是显示在通知栏
.build();



