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;
    }
相关推荐
存在的五月雨1 分钟前
Mqtt发送信息报错
java
杨凯凡2 分钟前
【016】集合框架总览:List/Set/Map 与线程安全
java·数据结构·list
Predestination王瀞潞3 分钟前
Java EE3-我独自整合(第六章:Spring AOP 工作流程与切入点表达式)
java·spring·java-ee
景庆1976 分钟前
vscode启动springBoot项目配置,激活环境
java·开发语言·vscode
小则又沐风a6 分钟前
Linux使用指南和基础指令(1)
java·linux·运维
三千星19 分钟前
Java开发者转型AI工程化Week 2:从核心能力到生产就绪
java·ai编程
亦暖筑序19 分钟前
让 AI 客服真能用的 3 个模块:情绪感知 + 意图识别 + Agent 工具链
java·人工智能·后端
SimonKing34 分钟前
别让你的代码裸奔!Spring Boot混淆全攻略(附配置)
java·后端·程序员
m0_6348654036 分钟前
idea快捷建项目
java·ide·intellij-idea
前端技术38 分钟前
[特殊字符]️ Spring AI Alibaba Advisor基础应用
java·人工智能·spring