unity 剪切板

1.Android方面:

//java脚本
package com.rwxgamecentre.jhqpqpa;

import android.app.Activity;
import android.content.ClipData;
import android.content.ClipDescription;
import android.content.ClipboardManager;
import android.content.Context;

//剪切板工具类
public class ClipboardTools 
{
    public static ClipboardManager clipboard = null;//调用完复制方法时,ClipboardTools类可能会被垃圾回收,那么ClipboardManager 的引用会变为null
    // 向剪贴板中添加文本
    public static void copyTextToClipboard( Context activity,  String str) throws Exception 
    {
        clipboard = (ClipboardManager) activity.getSystemService(Activity.CLIPBOARD_SERVICE);
        ClipData textCd = ClipData.newPlainText("data", str);
        clipboard.setPrimaryClip(textCd);
    }    
    // 从剪贴板中获取文本
    public static String getTextFromClipboard(Context activity) 
    {
        clipboard = (ClipboardManager) activity.getSystemService(Activity.CLIPBOARD_SERVICE);
        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();
        }
        return "null";
    }
}

主Active类调用
    //得到剪切板上的内容
    public String getTextFromClipboard()
    {
        return ClipboardTools.getTextFromClipboard(sContext);
    }

    //向剪切板拷贝文本
    public void copyTextToClipboard(String str) throws Exception 
    {
        UnityPlayer.UnitySendMessage("GameManager","ReceiveSDKMessage",str);
        ClipboardTools.copyTextToClipboard(sContext, str);//sContext是MainActive对象
    }

Unity 调用
        AndroidJavaClass jc;
        AndroidJavaObject jo;
    jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    jo = jc.GetStatic<AndroidJavaObject>("currentActivity");

    #region 剪切板
    public void CopyTextToClipboard(string message)
    {
        #if UNITY_ANDROID && !UNITY_EDITOR
            Debuger.Log("UnityCallHelper开始拷贝内容到剪切板上------>");
            jo.Call("copyTextToClipboard", message);
        #endif
    }
    public void GetTextFromClipboard()
    {
        #if UNITY_ANDROID //&& !UNITY_EDITOR
            Debuger.Log("UnityCallHelper得到剪切板上的内容------>");
            string message= jo.Call<string>("getTextFromClipboard");
            Debuger.Log("UnityCallHelper得到剪切板上的内容------>" + message);
        #endif
    }
    #endregion


2.IOS方面

1.在Unity的Plugins中添加.m文件
2.文件写
    char *MakeStringCpy(const char* string);

    void SetText_(const char* c)
    {
        [UIPasteboard generalPasteboard].string = [NSString stringWithCString: c encoding:NSUTF8StringEncoding];
    }

    char *GetText_()
    {
        return MakeStringCpy([[UIPasteboard generalPasteboard].string UTF8String]);
    }

    char *MakeStringCpy(const char* string)
    {
        if (string == NULL)
            return NULL;
        char* res = (char*)malloc(strlen(string) + 1);
        strcpy(res, string);
        return res;
    }

3.C#层注册
      [DllImport("__Internal")]
      static extern void SetText_ (string str);
      [DllImport("__Internal")]
      static extern string GetText_();

            #region 剪切板
            public void CopyTextToClipboard(string message)
            {
                if (Application.platform == RuntimePlatform.Android)
                {
                    Debuger.Log("AndroidUnityCallHelper开始拷贝内容到剪切板上------>");
                    jo.Call("copyTextToClipboard", message);
                }
                else if(Application.platform==RuntimePlatform.IPhonePlayer)
                {
                    Debuger.Log("UNITY_IOS---UnityCallHelper开始拷贝内容到剪切板上------>");
                    SetText_(message);
                }
            }

            public string GetTextFromClipboard()
            {
                string message = "";
                if (Application.platform == RuntimePlatform.Android)
                {
                    message = jo.Call<string>("getTextFromClipboard");
                    Debuger.Log("Android UnityCallHelper得到剪切板上的内容------>" + message);
                }
                else if (Application.platform == RuntimePlatform.IPhonePlayer)
                {
                    message = GetText_();
                    Debuger.Log("UNITY_IOS--UnityCallHelper得到剪切板上的内容------>" + message);
                }
                return message;
            }
            #endregion

4.打包Xcode,在Libins中添加.m文件的引用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值