很多应用都有一个“点击复制”的功能,这一功能在实际操作中非常便捷,这一功能的实现主要是通过Basic Services Kit(基础服务)中的“剪贴板服务”实现的。

代码如下:

async _Copy(text:string){
let pasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_PLAIN, text);
let systemPasteboard = pasteboard.getSystemPasteboard();
await systemPasteboard.setData(pasteData);
hm.toast("已复制到剪贴板");
}

代码虽然很简单,但是以下几个点是需要注意和了解的:

  1. 剪贴板服务是包括 访问剪贴板 和 向剪贴板里写入数据这两个主要部分的,其中,一键黏贴一类的功能属于“访问剪贴板”,而“点击复制”的本质是向剪贴板里写入数据,所以官网推荐的使用”安全控件“就不适用于这个”点击复制“的功能了,同样的,根据官网文档:

“申请ohos.permission.READ_PASTEBOARD权限,ohos.permission.READ_PASTEBOARD是受限的user_grant(用户授权)权限,使用自定义控件的应用可以通过申请ohos.permission.READ_PASTEBOARD权限,在用户授权的场景下访问剪贴板内容。”

其实你不用申请权限的,因为根本没有访问剪贴板内容,只是往里面写内容而已,不是访问。

  1. 虽然我刚才一直强调,这个是“写入剪贴板”而不是“读取剪贴板”,但都是对“剪贴板”进行的操作,所以如果你想要去上架这个app的话,那么有两点要注意的,第一是隐私协议里必须包含关于剪贴板的部分,第二是即使实际上这个功能不需要授权,你也要让用户进行对剪贴板进行一次手动授权,并且这个授权尽量是放在“点击复制"的功能页面之前,否则很容易被审核驳回

基于上述的第二个问题……我最后采用了另一个方法,“长按复制”,但是请注意,不是所有的Text组件都可以去长按复制的,要想长按文字后能够弹出对应的复制选项的,需要在这个Text组件里加上这个属性

.copyOption(CopyOptions.LocalDevice)

如果是准备做跨设备复制的,就要把LocalDevice替换成CROSS_DEVICE

长按复制虽然说操作上比点击一下一键复制更加复杂,但在上架审核环节中更加方便

-


礼貌的足球
1 声望0 粉丝