Unity3D实现复制文本到系统剪贴板
Unity中将文本拷贝到系统剪贴板,兼容UnityEditor、PC、Android和iOS。
C# 部分
ClipboardHelper.cs
如下:
using UnityEngine;
public class ClipboardHelper
{
/// <summary>
/// 复制文本到系统剪贴板
/// </summary>
/// <param name="text"></param>
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 <Foundation/Foundation.h>
@interface Clipboard : NSObject
extern "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;
}
@end
extern "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
目录下即可。