cocosCreator获取手机剪切板内容

最近游戏中需要加上复制粘贴的功能,这个时候就涉及到安卓原生层的东西。步骤如下:
公开文章地址,见个人博客

复制功能

ts代码

调用代码,在需要复制的地方调用即可。

ts 复制代码
     public static copyToClipBoard(str) {
          if (sys.platform == sys.Platform.ANDROID) {
               PlatformMgr.callNativeFn("copyToClipboard", str);
          }
     }
ts 复制代码
    static async callNativeFn(funcName: string, jsonMsg?: string): Promise<{ msg: string, isSucc: boolean }> {
        if (sys.platform != sys.Platform.ANDROID) // TODO: web 暂时只支持 Android 调用
            return

        let fn = PlatformMgr.Ins._platformIns[funcName]
        if (typeof (fn) == "function") { // 支持重写方法
            return await fn(funcName, jsonMsg)
        } else {
            return await PlatformMgr.Ins._platformIns.callNativeFn(funcName, jsonMsg)
        }
    }
ts 复制代码
import { NativeMgr } from "../../module/native/NativeMgr";

export class PlatformBase {

    // 最终调用 natvie 接口
    async callNativeFn(funcName: string, jsonMsg?: string) {
        return new Promise<{ msg: string, isSucc: boolean }>((resolve) => {
            NativeMgr.Ins.callNativeFunc((msg: string, isSucc: boolean) => {
                resolve({ msg: msg, isSucc: isSucc })
            }, funcName, jsonMsg)
        })
    }
}

java代码

放在你自己的逻辑中,放在AppActivity.java中即可。前面需要import相关的库文件

java 复制代码
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;

调用代码:

java 复制代码
public static void copyToClipboard(String textToCopy) {
        // 获取剪贴板管理器
        ClipboardManager clipboardManager = (ClipboardManager) getActivity().getApplicationContext().getSystemService(Context.CLIPBOARD_SERVICE);

        // 创建 ClipData 对象
        ClipData clipData = ClipData.newPlainText("Copied Text", textToCopy);

        // 将 ClipData 设置到剪贴板
        clipboardManager.setPrimaryClip(clipData);
        try {
            JSONObject jsonobj = new JSONObject();
            jsonobj.put("type", "copyText");
            jsonobj.put("code", "1");
            Log.d("copyToClipboard",  jsonobj.toString());
            String str = String.format("NativeAndroid.javaCallback(\'%s\')", jsonobj.toString());
//                    CocosJavascriptJavaBridge.evalString(str);
            callJsGlobalFunc(str);
        } catch (Exception e) {
        }
    }

获取剪切板内容

ts代码

ts 复制代码
     public static copyToClipBoard(str) {
          if (sys.platform == sys.Platform.ANDROID) {
               let android = new AndroidNative();
               android.getText("getText");
          }
     }
ts 复制代码
export class AndroidNative implements INativeCaller {
     getText(funcName: string, jsonMsg: string = "{}") {   
          let getText = native.reflection.callStaticMethod(this._activityName, funcName, "()Ljava/lang/String;");
          console.log("剪切板内容")
    }
}

java代码

java 复制代码
    public static String getText(){
        ClipboardManager clipboard = (ClipboardManager) getActivity().getApplicationContext().getSystemService(Context.CLIPBOARD_SERVICE);
        ClipData clip = clipboard.getPrimaryClip();
        if (clip != null && clip.getItemCount() > 0) {
            Log.d("剪切板内容 = ",clip.getItemAt(0).coerceToText(getActivity().getApplicationContext()).toString());
            return clip.getItemAt(0).coerceToText(getActivity().getApplicationContext()).toString();
        }
        return null;
    }
相关推荐
Data_Journal24 分钟前
掌握网页抓取中的分页:完整指南
java·服务器·前端
莫逸风27 分钟前
【AgentScope 2.0】05-文件系统(Filesystem)详解
java·ai·agent·springai·agentscope
苏灿烤鱼1 小时前
GitHub #1 拆解|它说自己在进化,但 worker 跑的是你本机权限,不是沙箱
人工智能·typescript·agent
mifengxing10 小时前
LeetCode 41.缺失的第一个正数|Hard题O(n)+O(1)最优解法深度解析
java·算法·leetcode·排序算法
markinmarkin13 小时前
Spring 中Bean 的作用域有哪些?
java·后端·spring
山荷枝14 小时前
Java学习第十天
java·学习
matlabgoodboy14 小时前
计算机毕设代做|Java Python Matlab APP 全套开发设计
java·python·课程设计
程序员雷欧15 小时前
环形缓冲区深度解析:从基础原理到Disruptor源码的全面剖析
java
xiaoqiMikko15 小时前
Dependabot 面板全绿,不代表你的 Tomcat 没洞
java·spring boot