安卓手机无法后台读取剪贴板,因android 10起系统禁止非前台app访问剪贴板,必须由用户点击等手势触发uni.getclipboarddata(),且需在manifest中启用clipboard模块并获用户授权。

不能在安卓手机上实现后台读取剪贴板。
安卓系统禁止 App 后台静默读取剪贴板
从 Android 10(API 29)起,系统明确限制非前台应用访问剪贴板——即使你的 App 在后台运行,uni.getClipboardData() 也会直接返回空或抛出权限拒绝错误。这不是 uni-app 的限制,而是 Android 原生安全策略。
- 用户未主动触发(如点击按钮),调用
uni.getClipboardData()必然失败 - 放在
onShow、onLoad、定时器或推送回调里,一律视为“非用户手势”,被系统拦截 - 华为、小米等厂商还额外加了剪贴板访问白名单机制,未预装/未手动授权的应用连前台都可能被拒
真机测试时看到 data: "" 或 Promise pending 的原因
这不是代码写错了,而是 Android 系统已静默拒绝访问。你不会收到明确错误,fail 回调可能不触发,success 回调里 res.data 就是空字符串。
- 检查是否在用户点击事件中调用(例如
@click="handlePaste"),而非生命周期钩子 - 确认 manifest.json 中已启用
clipboard模块(App 端必需) - 首次运行时用户是否点过「允许」——拒绝后需手动去「设置 → 应用 → 权限管理 → 剪贴板」开启
替代方案:引导用户主动触发 + 前台检测
所谓“自动识别邀请码”,实际只能做到:用户复制了内容 → 进入页面 → 点击「粘贴」按钮 → 调用 uni.getClipboardData() → 清洗(比如去掉 \u200b 零宽字符)→ 填入输入框。
- 输入框必须可聚焦:
ref="input"且不能设disabled或readonly - 赋值后立刻
this.$nextTick(() => this.$refs.input.focus()),光标就位才方便补全 - 别尝试轮询:
setInterval在后台会被系统休眠,前台也极耗电,且多数厂商会 kill 掉
真正能绕过限制的路径只有一条:让用户在微信/QQ 里点击带参数的链接(如 myapp://?code=abc),通过 URL Scheme 或 Universal Links 直接传参,而不是依赖剪贴板。











