Unity3D实现复制文本到系统剪贴板(PC, Android, iOS)

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目录下即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值