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); } }); }
这个时候..打包出来即可~~~