当前位置: 首页 > news >正文

【Android】Android开发应用如何开启任务栏消息通知

Android开发应用如何开启任务栏消息通知

  • 1. 获取通知权限
  • 2.编写通知工具类
  • 3. 进行任务栏消息通知

1. 获取通知权限

在 AndroidManifest.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>

可以在任意活动类中检查并申请相关权限

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;@Overrideprotected 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);}}/*** 权限请求结果返回*/@Overridepublic 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.编写通知工具类

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();// 获取当前时间戳(毫秒),作为通知Idlong 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. 进行任务栏消息通知

NotificationUtils.showNotification(getApplicationContext(), "title", "message");
http://www.lryc.cn/news/533273.html

相关文章:

  • 上传文件报错:the request was rejected because no multipart boundary was found
  • 大模型—Dify本地化部署实战
  • 功能架构元模型
  • 常用工具类——Collections集合框架
  • e2studio开发RA2E1(9)----定时器GPT配置输入捕获
  • 25/2/7 <机器人基础>雅可比矩阵计算 雅可比伪逆
  • 网络爬虫js逆向之异步栈跟栈案例
  • 使用Ollama本地部署deepseek
  • Rust错误处理:从灭火器到核按钮的生存指南
  • Golang:Go 1.23 版本新特性介绍
  • 电脑运行黑屏是什么原因?原因及解决方法
  • redis之AOF持久化过程
  • Elasticsearch:向量搜索的快速介绍
  • Docker在安装时遇到的问题(第一部分)
  • 使用 OpenGL ES 在 iOS 上渲染一个四边形:从基础到实现
  • Spring Boot 2 快速教程:WebFlux处理流程(五)
  • Vue 鼠标事件合集,关于鼠标右键的处理方法(改写鼠标右键方法、自定义鼠标右键)
  • 两种交换排序算法--冒泡,快速
  • 语音交友app系统源码功能及技术研发流程剖析
  • 零基础Vue入门7——状态管理Pinia
  • Bash (Bourne-Again Shell)、Zsh (Z Shell)
  • Android studio 创建aar包给Unity使用
  • DeepSeek R1 简单指南:架构、训练、本地部署和硬件要求
  • 图论常见算法
  • MySQL三大日志详解
  • 【SQL 中的分组查询与联合查询详解】
  • 【实战篇】用 Cursor 独立开发并上线电商类 Android APP 全攻略
  • quartus24.1版本子模块因时钟问题无法综合通过,FPGA过OOC问题复盘
  • 零基础Vue入门6——Vue router
  • 使用 Let‘s Encrypt 和 OpenResty 实现域名转发与 SSL 配置