Android开发应用如何开启任务栏消息通知
- [1. 获取通知权限](#1. 获取通知权限)
- 2.编写通知工具类
- [3. 进行任务栏消息通知](#3. 进行任务栏消息通知)
1. 获取通知权限
在 AndroidManifest.xml 里加上权限配置,如下。
xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<!-- 权限配置 -->
<!-- 通知栏信息权限 -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<!-- 下面是application配置 -->
</manifest>
可以在任意活动类中检查并申请相关权限
java
import android.content.pm.PackageManager;
import android.Manifest;
import android.os.Build;
import android.os.Bundle;
import android.widget.Button;
import android.widget.Toast;
import androidx.activity.EdgeToEdge;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import com.example.sda.R;
/**
* @author pengYuJun
*/
public class MainActivity extends AppCompatActivity {
/**
* 通知权限自定义编码
*/
private static final int NOTIFICATION_PERMISSION_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
// 调用父类的 onCreate 方法,以确保正确初始化活动
super.onCreate(savedInstanceState);
// 设置页面布局配置
setContentView(R.layout.activity_main);
// 检查权限,并申请
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
checkPermission();
}
}
/**
* 检查并请求所需权限
*/
@RequiresApi(api = Build.VERSION_CODES.TIRAMISU)
private void checkPermission(){
// 检查通知权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
// 请求权限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.POST_NOTIFICATIONS}, NOTIFICATION_PERMISSION_CODE);
}
}
/**
* 权限请求结果返回
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults.length == 0){
return;
}
if (requestCode == NOTIFICATION_PERMISSION_CODE) {
if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
// 权限被拒绝,显示提示信息
Toast.makeText(this, "申请通知权限被拒绝", Toast.LENGTH_SHORT).show();
}
}
}
}
2.编写通知工具类
java
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.os.Build;
import androidx.core.app.NotificationCompat;
import com.example.sda.R;
import com.example.sda.activity.MainActivity;
/**
* @author pengYuJun
*/
public class NotificationUtils {
public static void showNotification(Context context, String title, String content) {
NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
String channelId = context.getResources().getString(R.string.app_name);
String channelName = context.getResources().getString(R.string.app_name);
// 创建通知渠道(仅在 API 级别 26 及更高版本中需要)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = new NotificationChannel(
channelId,
channelName,
NotificationManager.IMPORTANCE_HIGH // 使用高重要性
);
// 注册渠道
manager.createNotificationChannel(channel);
}
// 通知点击的跳转页面
Intent intentTarget = new Intent(context.getApplicationContext(), MainActivity.class);
intentTarget.putExtra("xxx","xxx");
intentTarget.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 1, intentTarget, PendingIntent.FLAG_IMMUTABLE);
// 创建通知
Notification notification = new NotificationCompat.Builder(context, channelId)
.setContentTitle(title)
.setContentText(content)
.setContentIntent(pendingIntent)
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.drawable.icon_app)
.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.icon_app))
.setAutoCancel(true)
.setDefaults(Notification.DEFAULT_ALL)
.setPriority(NotificationCompat.PRIORITY_HIGH) // 使用高优先级
.build();
// 获取当前时间戳(毫秒),作为通知Id
long currentTimeMillis = System.currentTimeMillis();
// 将时间戳转换为 int 类型
int notifyId = (int) (currentTimeMillis % Integer.MAX_VALUE);
// 发送通知
manager.notify(notifyId, notification);
}
}
注意,当版本高时,创建通知渠道,需要使用高重要性: NotificationManager.IMPORTANCE_HIGH,这样通知会弹出悬挂横幅弹窗。若版本低时,则需要高优先级:setPriority(NotificationCompat.PRIORITY_HIGH)。当不需要弹出悬挂横幅弹窗时,默认重要性、默认优先级即可。
再注意,每次改变重要性、优先级这些,需要卸载app再重新安装才能生效。至少在笔者2025/2/7开发时,为如此。
其他配置可自行根据需求探索。
3. 进行任务栏消息通知
java
NotificationUtils.showNotification(getApplicationContext(), "title", "message");