• 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);
                }
            });
        }
    

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

      

  • 相关阅读:
    Css Hack
    flex 兼容 ie9
    js 阻止父级元素的事件向子级元素传递
    php正则表达式的匹配与替换
    php的匿名类的使用
    解决php的单继承问题,实现php的多继承,trait的使用
    php的抽象类和接口的总结和区别
    eclipse的maven项目Java Resources有红叉问题
    IntelliJ全家桶IDEA Webstorm 2020 永久破解方法(说是可以任何版本)
    电脑能ping 通 ip,但是不能ping通 域名
  • 原文地址:https://www.cnblogs.com/jbw752746541/p/9360553.html
Copyright © 2020-2023  润新知