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;
    }
相关推荐
拾贰_C几秒前
【SpringBoot】MyBatisPlus(MP | 分页查询操作
java·spring boot·后端·spring·maven·apache·intellij-idea
猛踹瘸子那条好腿の4 分钟前
Spring-boot初次使用
java·springboot
我不是程序猿儿2 小时前
【C#】 lock 关键字
java·开发语言·c#
tmacfrank3 小时前
网络编程中的直接内存与零拷贝
java·linux·网络
weixin_472339464 小时前
Maven 下载安装与配置教程
java·maven
Magnum Lehar5 小时前
3d游戏引擎EngineTest的系统实现3
java·开发语言·游戏引擎
就叫飞六吧5 小时前
Spring Security 集成指南:避免 CORS 跨域问题
java·后端·spring
Mcworld8575 小时前
java集合
java·开发语言·windows
天黑请闭眼5 小时前
IDEA:程序编译报错:java: Compilation failed: internal java compiler error
java·intellij-idea
苍煜6 小时前
Maven构建流程详解:如何正确管理微服务间的依赖关系-当依赖的模块更新后,我应该如何重新构建主项目
java·微服务·maven