Android----------短信消息提醒(Notification)

本文介绍了一个用于Android系统的通知功能封装方法,通过自定义函数实现消息推送,并详细解释了如何设置通知的唯一标识、内容及点击行为等。

我将整个过程用函数封装起来,其中参数ord_id :为每个消息的标题,address:为每个消息在任务下拉框显示的内容

public void Notifi(String ord_id,String address){

String  d = new SimpleDateFormat("ddHHmmssS").format(Calendar.getInstance().getTime());//这里的参数d为每个消息的唯一标示,由于我设置的是弹出消息为每150ms刷新一次,所以这里我设置d的时候选择精确到一位毫秒 ,保证d不会重复,当然如果连续显示消息一个月 而且不点击查看 的话 就不行了,因为我设置的最大单位为一个月

int i;

try{

i Integer.parseInt(d);

}catch(Exception e){

i = ox1;

}

NotificationManger manger = (NotificationManger)getSystemService(NOTIFICATION_SERVICE);

Notification notification = new Notification(R.drawable.ic_launcher,"短信名称",System.currentTimeMillis());//其中第一个参数为短息提示的图标,后面两个参数是在他之后显示的

Intent intent = new Intent(getApplicationContext(),NewOrder.class);//这里第二个参数设置点击状态栏短信跳转的页面

Bundle data = new Bundle();

data.putString("ord_id",ord_id);

//在这里进行参数的传递

intent.putExtras(data);

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);//这里设置多个短信同时打开时,新的短信打开关闭其他已经打开的短信

PendingIntent pi = PendingIntent.getActivity(getApplicationContext(),i,intent,PendingIntent.FLAG_UPDATE_CURRENT);

notification.setLatestEventInfo(getApplicationContext(),ord_id,address,pi);//第二 个参数为短信标题,第三个参数为短信通知内容

notification.defaults = Notification.DEFAULT_ALL;//设置所有短信提醒效果为默认值

notification.flags = Notification.FLAG_AUTO_CANCEL;//消息被点击后,消息自动在通知栏消失

manager.notify(i,notification);//第一个参数为通知唯一id,若重复的覆盖

}

<think>好的,用户在使用termux-notification-list时遇到了获取空的问题,我需要分析可能的原因和解决方法。首先,用户可能没有正确授予Termux通知权限。Termux需要用户手动允许访问通知,否则无法获取任何内容。这时候应该提醒用户检查权限设置,并指导他们如何授权。 接下来,用户可能没有触发任何通知。如果设备当前没有任何通知,或者目标应用(比如短信应用)的通知没有被触发,termux-notification-list自然返回空。建议用户发送一条测试短信,并确保通知被正确显示。 还有可能是JSON解析问题。Termux的notification-list返回的是JSON数据,如果结构有变化,或者用户使用的jq命令不正确,也会导致解析失败。这时候需要检查jq命令是否正确,特别是字段名称是否匹配,比如.packageName是否正确,或者是否需要使用.id代替。 另外,用户可能在Android 13或更高版本上遇到限制,因为这些系统版本对后台应用获取通知有更严格的限制。需要建议用户将Termux加入电池优化的白名单,允许后台运行。 路径问题也可能存在,如果用户修改了脚本中的存储路径,可能导致文件不存在或权限问题。应该建议使用Termux的私有目录,并检查文件路径是否正确。 最后,用户可能没有正确安装依赖,比如jq或Python,需要确认是否已经通过pkg install安装这些工具,以及Python脚本的依赖是否安装,比如secure-smtplib是否正确安装。 总结起来,解决步骤应该是:检查权限、测试通知触发、验证jq命令、考虑系统限制、检查路径和依赖。需要一步步引导用户排查,确保每个环节都正确配置。</think>以下是针对 `termux-notification-list` 获取空值的排查与解决方案: --- ### **常见原因及排查步骤** #### 1. **未授予通知权限** ✅ **表现**:直接运行命令返回空 ✅ **修复方法**: ```bash # 手动触发权限请求 termux-notification-list ``` - 按照手机弹出的权限提示 **允许Termux访问通知** - 在系统设置中确认权限已开启:`设置 → 应用 → Termux → 通知权限` --- #### 2. **未触发有效通知** ✅ **表现**:只能获取到空数组`[]` ✅ **验证方法**: ```bash # 手动创建测试通知 termux-notification -t "测试标题" -c "测试内容123456" # 再次查询 termux-notification-list | jq . ``` - 若测试通知可被获取,说明原脚本的 **筛选条件可能错误**(如包名不匹配) --- #### 3. **通知过滤条件错误** ✅ **典型问题**:`jq` 筛选器未匹配实际通知格式 ✅ **改进方案**: ```bash # 查看所有通知原始数据(调试用) echo "$notifications" | jq . # 尝试更宽松的筛选(例如匹配所有含6位数字的通知) new_code=$(echo "$notifications" | jq -r '.[].content' | grep -oE '\b[0-9]{6}\b' | head -n1) ``` --- #### 4. **Android系统限制(重要)** ✅ **表现**:Android 13+ 系统获取不到第三方应用通知 ✅ **解决方案**: - 关闭系统 **"通知历史记录"** 限制: ```bash adb shell settings put secure enabled_notification_listeners com.termux/com.termux.app.TermuxNotificationListener ``` - 将Termux加入电池优化白名单(允许后台运行) --- ### **增强版脚本(含调试输出)** ```bash #!/data/data/com.termux/files/usr/bin/bash # 调试模式:输出原始通知数据 notifications=$(termux-notification-list) echo "原始通知数据:" >&2 echo "$notifications" | jq . >&2 # 提取验证码(放宽匹配条件) new_code=$(echo "$notifications" | jq -r '.[].content' | grep -oE '\b[0-9]{6}\b' | head -n1) echo "提取的验证码:$new_code" >&2 # 后续处理逻辑保持不变... ``` --- ### **验证流程图** ``` 开始 ├─ 运行 termux-notification-list → 是否返回数据? │ ├─ 是 → 检查jq筛选条件 │ └─ 否 → 检查权限和系统限制 │ ├─ 手动创建测试通知 → 能否被获取? │ ├─ 能 → 原脚本筛选条件错误 │ └─ 否 → 检查Termux后台限制 │ └─ 检查Android版本 → 是否≥13? ├─ 是 → 执行adb命令解除限制 └─ 否 → 检查电池优化设置 ``` --- ### **补充说明** - 若使用 **企业微信/钉钉等定制ROM**,可能需要单独开启通知权限 - 部分银行类App的通知内容会加密,无法直接提取数字验证码 - 可通过 `termux-toast` 添加可视化提示: ```bash termux-toast -g middle "检测到验证码: $new_code" ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咖飞_coffee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值