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

网站建设应注意哪些事项wordpress 收费 视频

网站建设应注意哪些事项,wordpress 收费 视频,wordpress要懂php,长沙网站推广¥做下拉去118crAndroid:读取剪切板与禁用剪切板复制功能(完整指南)本文面向 Android 开发者,覆盖:如何读取剪切板、监听剪切板变化、以及如何在界面中禁用复制/粘贴/选择操作。包含 Java/Kotlin 示例、兼容性注意与隐私/安全要点。目…

Android:读取剪切板与禁用剪切板复制功能(完整指南)

本文面向 Android 开发者,覆盖:如何读取剪切板、监听剪切板变化、以及如何在界面中禁用复制/粘贴/选择操作。包含 Java/Kotlin 示例、兼容性注意与隐私/安全要点。


目录

  1. 剪切板基础(ClipboardManager)

  2. 读取剪切板 — 示例(Java / Kotlin)

  3. 监听剪切板变化(剪贴板监听器)

  4. Android 隐私变更:Android 10+ 的限制与提示

  5. 在 EditText / TextView 中禁用复制/粘贴/选择(多种可靠方案)

  6. 在 WebView / 自定义组件中禁用复制粘贴的注意

  7. 设计建议与隐私合规

  8. 总结


1. 剪切板基础(ClipboardManager)

Android 提供 ClipboardManager(位于 android.content)来读写“主剪贴板”(primary clip)。常用 API:

  • setPrimaryClip(ClipData clip):写入剪贴板

  • getPrimaryClip():读取剪贴板数据(注意权限/前台限制)

  • addPrimaryClipChangedListener(listener):监听剪贴板变更

示例代码会在下面给出。


2. 读取剪切板 — 示例

Java(安全的基本读取)

ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
if (clipboard != null && clipboard.hasPrimaryClip()) {ClipData clip = clipboard.getPrimaryClip();if (clip != null && clip.getItemCount() > 0) {CharSequence text = clip.getItemAt(0).coerceToText(this);if (text != null) {String clipText = text.toString();// 使用 clipText}}
}

Kotlin

val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManager
clipboard?.let {val clip = it.primaryClipif (clip != null && clip.itemCount > 0) {val text = clip.getItemAt(0).coerceToText(this)?.toString()// 使用 text}
}

注意:在读取前判断 hasPrimaryClip()clip != null 可以避免 NPE。coerceToText() 可以将 URI/Intent 等转换为可显示文本(如果适用)。


3. 监听剪切板变化

想在应用内响应剪切板变化(例如实现剪贴板历史、或检测用户复制了敏感内容),可以注册 OnPrimaryClipChangedListener

ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipboardManager.OnPrimaryClipChangedListener listener = new ClipboardManager.OnPrimaryClipChangedListener() {@Overridepublic void onPrimaryClipChanged() {// 剪贴板内容变化时调用if (clipboard.hasPrimaryClip()) {ClipData clip = clipboard.getPrimaryClip();// 处理}}
};// 注册
clipboard.addPrimaryClipChangedListener(listener);
// 注销
clipboard.removePrimaryClipChangedListener(listener);

在 Kotlin 中类似:

val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val listener = ClipboardManager.OnPrimaryClipChangedListener {// 处理变化
}
clipboard.addPrimaryClipChangedListener(listener)
// 需要时移除:clipboard.removePrimaryClipChangedListener(listener)

注意:记得在 onPause() / onDestroy() 中移除监听器,避免内存泄漏。


4. Android 隐私变更:Android 10+ 的限制与提示(关键)

从 Android 10(API 29)开始,系统为了保护隐私对剪贴板访问作了行为限制:非前台(没有焦点)的应用不能随意读取主剪贴板。也就是说,后台应用读取剪贴板会被系统阻止。

另外 Android 12(API 31)引入了当应用首次读取其他应用剪贴板内容时显示 toast 通知(系统提醒用户某应用读取了剪贴板)。这些变更目的是提高隐私,开发者需注意:

  • 仅在应用前台(或作为 IME/键盘)时读取剪贴板,避免不必要的后台读取。

  • 如果你依赖于持续后台剪贴板访问(如剪贴板管理工具),需要将功能放到输入法/键盘或向用户说明受限场景。

(来源:Android 官方文档、Android 行为变更说明与安全博客)


5. 在 EditText / TextView 中禁用复制/粘贴/选择

如果你的需求是禁止用户从你的应用界面复制/粘贴(例如保险类/含敏感信息页面、金融类一次性展示),下面给出常用实现方式并说明兼容性:

方法 A:XML 层面禁用选择与长按(简单)

适用于只需要防止用户选择与长按菜单的场景:

<EditTextandroid:id="@+id/edit"android:layout_width="match_parent"android:layout_height="wrap_content"android:longClickable="false"android:textIsSelectable="false"android:cursorVisible="false" />

说明:这能阻止长按弹出粘贴/复制菜单,并阻止文本选择。但对于某些 OEM 或自定义 ROM 上的行为可能有所不同。

方法 B:在代码中禁用动作模式(推荐更细粒度)

通过 setCustomSelectionActionModeCallback 拦截复制/粘贴相关的上下文菜单:

editText.setCustomSelectionActionModeCallback(new ActionMode.Callback() {@Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { return false; }@Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; }@Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { return false; }@Override public void onDestroyActionMode(ActionMode mode) {}
});// 额外:禁用长按与光标选择
editText.setLongClickable(false);
editText.setTextIsSelectable(false);

该方法会阻止选择操作模式创建,从而屏蔽“复制/剪切/粘贴”的快捷菜单。

注意onCreateActionMode 返回 false 会导致无法进入选择模式;某些设备厂商的输入法或定制行为仍可能弹出菜单,需要结合 setOnLongClickListeneronCreateContextMenu 等处理。

方法 C:覆盖 isSuggestionsEnabled() / onTextContextMenuItem(更彻底)

可通过重写 EditText

public class NoCopyEditText extends androidx.appcompat.widget.AppCompatEditText {public NoCopyEditText(Context context, AttributeSet attrs) {super(context, attrs);setLongClickable(false);setTextIsSelectable(false);}@Overridepublic boolean onTextContextMenuItem(int id) {// 屏蔽剪贴板相关菜单(复制/粘贴/剪切)return false;}@Overridepublic boolean isSuggestionsEnabled() {return false;}
}

onTextContextMenuItem 对应菜单项 id 为 android.R.id.copy, android.R.id.paste 等,返回 false 即阻止默认行为。

方法 D:动态监听文本变化并清理粘贴内容(防止绕过)

因为有些第三方键盘可能直接插入文本而不触发上下文菜单,你可以在 TextWatcherafterTextChanged 中检测并清理不允许的内容:

editText.addTextChangedListener(new TextWatcher() {@Override public void beforeTextChanged(CharSequence s, int st, int c, int a) {}@Override public void onTextChanged(CharSequence s, int st, int b, int c) {}@Overridepublic void afterTextChanged(Editable s) {// 检测并清理不合法插入(例如包含特殊字符或过长)}
});

组合使用以上方法可以提高可靠性:XML 层面禁用 + 自定义 EditText + 文本监听。


6. 在 WebView / 自定义组件中禁用复制粘贴

  • 对于 WebView,可以通过 JS 注入禁用选择:在页面中添加 document.body.style.userSelect = 'none' 或 CSS -webkit-user-select: none;,并且在 WebView 设置中禁用长按菜单。

  • 同时在宿主 App 中,覆盖 WebViewonCreateContextMenuisLongClickable,并拦截 MotionEvent 的长按事件。

注意:Web 内容可能由第三方提供,无法完全信任;若需强控制,尽量避免加载不受信任内容或在原生层面做拦截。


7. 设计建议与隐私合规

  • 透明告知:如果你的应用会读取剪贴板(例如实现粘贴按钮、剪贴板历史或自动识别复制的链接),应在隐私策略/功能提示中明确告知用户,并仅在用户允许或在界面有明确交互时读取。Android 12+ 会显示系统通知,用户可见读取行为。

  • 最小权限原则:仅在必要时读取剪贴板,不要在后台静默扫描剪贴板中的敏感数据。

  • 兼容性测试:在不同 Android 版本(尤其 Android 10、11、12+)与常见 OEM(Samsung、Xiaomi、Huawei 等)上测试,因为不同定制 ROM 的行为有差异。


8. 总结

  • 读取剪贴板使用 ClipboardManagergetPrimaryClip();监听使用 addPrimaryClipChangedListener()

  • 从 Android 10+ 起,系统限制后台读取剪贴板;Android 12+ 首次读取会显示系统 toast,注意隐私影响。

  • 在界面上禁用复制/粘贴可以用 android:longClickable="false" / setCustomSelectionActionModeCallback / 自定义 EditText 等多种方法组合实现,必要时在 TextWatcher 中做补救。

http://www.dtcms.com/a/565799.html

相关文章:

  • 外贸找客户有什么网站平台公司会倒闭吗
  • P5091 【模板】扩展欧拉定理
  • C盘爆满急救指南
  • 天台高端网站建设公司专业网站设计公司价格
  • 温州专业微网站制作公司天猫网页版
  • 免费网络推广网站王烨重生
  • 微气象仪:精准感知微环境气象变化
  • svn使用之创建分支进行开发
  • 拍卖网站建设公司社交类电商平台
  • Elasticsearch 8 安装与配置
  • 邯郸做网站推广找谁盛大游戏优化大师
  • HR1124S/HR1154D:赋能直流电机高效安全运行的核心芯片
  • 化妆品网站网页设计营销培训师
  • 网站积分解决方案标书制作模板
  • 前端直接渲染Markdown
  • Vue 3.5 新特性——useTemplateRef:简化模板引用的革命!
  • 网站开发技术三大件网页设计与制作教程期末考试试题
  • 赣州制作网站企业个人简历自我评价
  • 寄存器与存储器的区别(TLB和Cache,指令流水线分析)
  • 思维链(CoT)× 智能体(Agent)× 提示词(Prompt)讲解
  • MAC-SQL 图1
  • 第一章 WPF概述
  • 建设网站主机免费版展厅设计与施工公司
  • 如何注册网站免费的吗wordpress注释符号
  • 博客网站快速排名常用的设计软件有哪些
  • 做直播导航网站有哪些网站后端开发语言
  • C# 常用集合的使用
  • 合肥市建设网官方网站公司微网站怎么做的
  • 网站服务器的费用如何在网站后台删除栏目
  • 3.4 Lua代码中的文件操作