Unity中调用手机中的粘贴功能

最近有个小需求,就是点击一个按钮,然后复制整个文本中的内容..然后根据网上大神们的教程找到了思路..

https://blog.csdn.net/u011416077/article/details/51513935 

https://www.cnblogs.com/xiaozefeng/p/Unity_Android_IOS.html

谢谢两位大神~

老规矩,新建一个Canvas,并创建一个Button,一个Text,Text里面的内容自己书写~ 创建一个脚本命名为 : CopyManager

源码如下:

 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.Runtime.InteropServices;

public class CopyManager : MonoBehaviour
{
    //按钮
    Button btn;
    Text text;
    void Start ()
    {
        //初始化
        btn = transform.Find ("Button").GetComponent <Button> ();
        text = transform.Find ("Text").GetComponent <Text> ();

        btn.onClick.RemoveAllListeners ();
        //点击事件
        btn.onClick.AddListener (delegate {
            //ios调用
            #if    UNITY_IPHONE
            //点击按钮开始复制
            CopyForIOS (text.text);
            //安卓调用
            #elif UNITY_ANDROID
            AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
            AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject> ("currentActivity");
            if (jo == null) {
                return;
            }
            jo.Call ("CopyTextToClipboard", jo, text.text);
            Debug.Log ("text = " + text.text);
            #endif
        });
    }
    //调用Xcode中的方法
    [DllImport ("__Internal")]
    public static extern void CopyForIOS (string text);
}

  

IOS:

接下来就是打包了,注意自己的包名的命名格式...

打开Xcode,新建一个.mm文件命名为 Clipboard.mm,源码如下

//
//  Clipboard.m
//  Unity-iPhone
//
//
@interface Clipboard :NSObject
extern "C"
{
    void CopyForIOS(const char *textList);
}
@end

@implementation Clipboard

//将文本复制到IOS剪贴板
-(void) Objc_CopyForIOS:(NSString*) text
{
    UIPasteboard *pastedBoard = [UIPasteboard generalPasteboard];
    pastedBoard.string = text;
}
@end
extern "C"{
    static Clipboard *iosClipboard;
    void CopyForIOS(const char *textList)
    {
        NSString *text = [NSString stringWithUTF8String: textList] ;
        if(iosClipboard == NULL)
        {
            iosClipboard = [[Clipboard alloc] init];
        }
        [iosClipboard Objc_CopyForIOS:text];
    }
}

 将该文件放入到Unity中的 Plugins->iOS目录下在进行编译一下

这个时候就可以打包出来进行测试啦~

 

Android:

我使用的是Android Studio工具..所以操作起来很方便..

只需要在  UnityPlayerActivity 中添加如下代码:

 public  static ClipboardManager clipboard = null;

    //Unity中调用的方法
    public  void CopyTextToClipboard(final Context activity,final  String str) throws Exception {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                ClipboardManager clipboardManager = (ClipboardManager)activity.getSystemService(Activity.CLIPBOARD_SERVICE);
                ClipData text = ClipData.newPlainText("data", str);
                clipboardManager.setPrimaryClip(text);
            }
        });
    }

  这个时候..打包出来即可~~~

  

posted @ 2018-07-24 15:59  不够自律的人  阅读(326)  评论(0编辑  收藏  举报