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

浙公网安备 33010602011771号