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文件的引用