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;
    }
相关推荐
大阿明9 小时前
Spring Boot(快速上手)
java·spring boot·后端
bearpping9 小时前
Java进阶,时间与日期,包装类,正则表达式
java
邵奈一9 小时前
清明纪念·时光信笺——项目运行指南
java·实战·项目
sunwenjian88610 小时前
Java进阶——IO 流
java·开发语言·python
sinat_2554878110 小时前
读者、作家 Java集合学习笔记
java·笔记·学习
皮皮林55110 小时前
如何画出一张优秀的架构图?(老鸟必备)
java
百锦再10 小时前
Java 并发编程进阶,从线程池、锁、AQS 到并发容器与性能调优全解析
java·开发语言·jvm·spring·kafka·tomcat·maven
森林猿10 小时前
java-modbus-读取-modbus4j
java·网络·python
tobias.b10 小时前
计算机基础知识-数据结构
java·数据结构·考研
reembarkation11 小时前
光标在a-select,鼠标已经移出,下拉框跟随页面滚动
java·数据库·sql