Unity3D实现复制文本到系统剪贴板(PC, Android, iOS)
16lz
2021-01-25
Unity3D实现复制文本到系统剪贴板
Unity中将文本拷贝到系统剪贴板,兼容UnityEditor、PC、Android和iOS。
C# 部分
ClipboardHelper.cs
如下:
using UnityEngine;public class ClipboardHelper{ /// /// 复制文本到系统剪贴板 /// /// public static void Copy(string text) {#if UNITY_ANDROID && !UNITY_EDITOR //For Android AndroidJavaObject javaClipboardHelper = new AndroidJavaObject("com.game.ClipboardHelper"); AndroidJavaObject activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity"); if (activity != null) { javaClipboardHelper.Call("copyTextToClipboard", activity, text); }#elif UNITY_IOS && !UNITY_EDITOR //For iOS _copyTextToClipboard(text);#else //方法一 var textEditor = new TextEditor(); textEditor.text = text; textEditor.OnFocus(); textEditor.SelectAll(); textEditor.Copy(); //方法二 GUIUtility.systemCopyBuffer = text;#endif }#if UNITY_IOS [DllImport ("__Internal")] private static extern void _copyTextToClipboard(string text);#endif}
Android 部分
利用AndroidStudio新建一个Module,这里起名为ClipboardHelper,包名例如com.game,创建ClipboardHelper.java
如下:
import android.app.Activity;import android.content.ClipData;import android.content.ClipDescription;import android.content.ClipboardManager;import android.content.Context;public class ClipboardHelper { public static ClipboardManager clipboard = null; public void copyTextToClipboard(Context activity, String str) throws Exception { clipboard = (ClipboardManager) activity.getSystemService(Activity.CLIPBOARD_SERVICE); ClipData clipData = ClipData.newPlainText("data", str); clipboard.setPrimaryClip(clipData); } public String getTextFromClipboard() { if (clipboard != null && clipboard.hasPrimaryClip() && clipboard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) { ClipData cdText = clipboard.getPrimaryClip(); ClipData.Item item = cdText.getItemAt(0); return item.getText().toString(); } else { return ""; } }}
将该Module构建输出成.aar格式的文件,或直接解压该.aar文件取出其中的.jar包,将其放入Unity项目中的Assets/Plugins/Android
目录下即可。
iOS 部分
可直接使用文本编辑器创建头文件和oc源文件,ClipboardHelper.h
如下:
#import @interface Clipboard : NSObjectextern "C"{ void _copyTextToClipboard(const char *textList);}@end
ClipboardHelper.mm
如下:
#import "ClipboardHelper.h"@implementation Clipboard- (void) objc_copyTextToClipboard : (NSString*)text{ UIPasteboard *pasteboard = [UIPasteboard generalPasteboard]; pasteboard.string = text;}@endextern "C" { static Clipboard *iosClipboard; void _copyTextToClipboard(const char *textList) { NSString *text = [NSString stringWithUTF8String: textList]; if (iosClipboard == NULL) { iosClipboard = [[Clipboard alloc] init]; } [iosClipboard objc_copyTextToClipboard: text]; }}
将以上两个文件放入Unity项目中的Assets/Plugins/iOS
目录下即可。
更多相关文章
- 为什么要学习 Markdown?究竟有什么用?
- 一款常用的 Squid 日志分析工具
- GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
- RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
- Android(安卓)数据存储方式有哪几种
- C++与java混合编写和C++与OC混合编写 笔记
- Android(安卓)studio插件大全
- android BannerView实现自动轮播广告的用法(参考自github)