无互联网环境下Android Studio应用新增MySQL记录推送通知问题
局域网环境下MySQL新增记录推送通知的实现方案
方案1:数据库触发+本地后台服务推送
这是最可靠的方案,适合15台设备的局域网场景:
- 给MySQL目标表添加触发器(Trigger):当有新记录插入时,将新增数据的关键信息写入专门的「通知事件表」
- 在局域网内部署一个轻量后台服务(用Java/Python均可),持续轮询「通知事件表」,发现新事件后通过MQTT或WebSocket协议给所有Android设备推送消息
- Android端集成对应客户端SDK,保持与后台服务的长连接,收到消息后调用系统通知API弹出通知
关键代码示例
- MySQL触发器创建:
DELIMITER // CREATE TRIGGER after_new_record_insert AFTER INSERT ON your_target_table FOR EACH ROW BEGIN INSERT INTO notification_events (record_id, content, create_time) VALUES (NEW.id, CONCAT('新增记录:', NEW.title), NOW()); END // DELIMITER ;
- Android端收到MQTT消息后触发通知:
@Override public void messageArrived(String topic, MqttMessage message) throws Exception { String content = new String(message.getPayload()); // 构建系统通知 NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "NEW_RECORD_CHANNEL") .setSmallIcon(R.drawable.ic_notify) .setContentTitle("数据库新增记录") .setContentText(content) .setPriority(NotificationCompat.PRIORITY_DEFAULT); NotificationManagerCompat.from(context).notify(1001, builder.build()); }
方案2:Android端直接轮询数据库(简易方案)
如果不想额外部署后台服务,可让设备定期轮询MySQL:
- 每次查询时记录当前最大的记录ID,存储在SharedPreferences中
- 下次查询先对比本地存储的ID与数据库最新ID,若后者更大则获取新增数据并触发通知
- 缺点:频繁轮询会消耗设备资源和数据库连接,仅适合记录新增频率低的场景
方案3:MySQL UDF+局域网UDP广播
借助MySQL用户自定义函数(UDF),在触发器触发时直接发送UDP广播:
- 编写MySQL UDF实现UDP广播逻辑,触发器触发时调用该函数发送通知消息
- Android端监听指定UDP端口,收到广播后弹出通知
- 注意:UDP广播稳定性受局域网路由器设置影响,可能存在跨网段接收失败的问题
核心注意事项
- 确保所有设备与MySQL服务器在同一局域网,网络互通
- Android 13及以上需单独申请
POST_NOTIFICATIONS权限 - 若用MQTT/WebSocket方案,后台服务需部署在持续开机的设备上(如工控机、服务器)
内容的提问来源于stack exchange,提问作者Kineh
相关产品推荐
相关产品推荐

