# 通知同步

## 示例说明

演示手机端如何获取通知监听权限、筛选允许同步的应用，并把通知转发到眼镜端。

## 使用位置

手机端：

- `NotificationActivity`
- `MessageNotificationListenerService`

眼镜端接收页：

- `glassdemo` 中的 `MessageReceiveActivity`

## 适用端

- 手机端
- 眼镜端

## 关键文件

- [glass3sdkphonedemo/app/src/main/java/com/rokid/phone/notification/NotificationActivity.kt](https://gitee.com/as_pixar/glass3sdkdemo/blob/main/glass3sdkphonedemo/app/src/main/java/com/rokid/phone/notification/NotificationActivity.kt)
- [glass3sdkphonedemo/app/src/main/java/com/rokid/phone/notification/service/MessageNotificationListenerService.kt](https://gitee.com/as_pixar/glass3sdkdemo/blob/main/glass3sdkphonedemo/app/src/main/java/com/rokid/phone/notification/service/MessageNotificationListenerService.kt)
- [glassdemo/app/src/main/java/com/rokid/glass/MessageReceiveActivity.kt](https://gitee.com/as_pixar/glass3sdkdemo/blob/main/glassdemo/app/src/main/java/com/rokid/glass/MessageReceiveActivity.kt)

## 流程说明

1. 手机端进入通知设置页。
2. 检查通知监听权限是否已开启。
3. 若未开启，引导用户跳到系统通知监听设置页。
4. 读取本机应用列表并允许用户勾选可同步应用。
5. 通知监听服务收到系统通知后，按配置决定是否转发。
6. 眼镜端通过通知监听器接收通知消息。

## 实现说明

### 覆盖范围

两者都覆盖，但重点在前者：

- 手机端负责拿权限、筛选应用、拦截通知
- 眼镜端只是一个最小展示实现

### 权限为什么经常失败

通知监听不是普通运行时权限，它依赖系统设置授权，所以要同时考虑：

- 是否开启了通知监听服务
- 页面上记录的业务开关是否打开

## 注意事项

- 页面中有“全量应用通知开关”和“仅锁屏时通知”配置。
- 如果通知监听未开启，页面会主动引导授权。
