2019.7 更新
unity 2019版好像有api了,不用再自己提供原生插件
Debug.Log($"剪贴板文本 = {GUIUtility.systemCopyBuffer}");
GUIUtility.systemCopyBuffer = "新剪贴板文本";
不过这个我还没有试过,大家可以尝试一下
2018.7 更新
这个写的时间很久了,文中提供的Apk与现在的安卓版本不匹配,大家就不要下载安装了,本文主要是提供一个思路
这些是你需要了解的:
我这里主要是讲解这两篇博客结合了一下,改变的地方是将第一篇中安卓交互的方式由导入编译的jar包改为将unity工程导出Android Studio工程,将原生java代码放到as工程里再打包。因为现在公司里面接入SDK和进行原生功能开发都是基于这样的步骤。我这里只讲解流程,原理请看上面两篇博客。
新建unity工程
创建场景如下
一个将文本复制进剪切板的按钮,一个获取剪切板文本的按钮
导出Android工程并打开
这里你可能需要配置安卓环境,但不在本篇内容范围内
步骤在这里==>导出的Android-Studio工程
我的是2017.3版本,和之前老版本有些不一样,需要设置红框内选项
创建ClipboardTools.java脚本
package com.mengl.aaasda;
/**
* Created by channing on 2018/5/24.
*/
import android.content.ClipboardManager;
import android.content.ClipData;
import android.content.ClipDescription;
import android.content.Context;
import android.app.Activity;
public class ClipboardTools{
public static ClipboardManager clipboard = null;
// 向剪贴板中添加文本
public static void copyTextToClipboard(final Context activity, final String str) throws Exception {
clipboard = (ClipboardManager) activity.getSystemService(Activity.CLIPBOARD_SERVICE);
ClipData textCd = ClipData.newPlainText("data", str);
clipboard.setPrimaryClip(textCd);
}
// 从剪贴板中获取文本
public static String getTextFromClipboard() {
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";
}
}
脚本放在包名路径下,我这里是src\main\java\com\mengl\aaasda
编写unity交互脚本
我是保证脚本尽量简单,下面两个方法分别绑定到两个按钮上
using System.Collections;
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Manegeer : MonoBehaviour {
public InputField input;
AndroidJavaObject activity;
void Start () {
#if UNITY_ANDROID
activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic("currentActivity");
if (activity == null)
return;
#endif
}
public void copy()
{
using (AndroidJavaClass clipboard = new AndroidJavaClass("com.mengl.aaasda.ClipBoard"))
{
clipboard.CallStatic("copyTextToClipboard", activity, input.text);
input.text = "copy success!";
}
}
public void getTextFromClipboard()
{
using (AndroidJavaClass clipboard = new AndroidJavaClass("com.mengl.aaasda.ClipBoard"))
{
String text = clipboard.CallStatic("getTextFromClipboard");
input.text = "get success!";
}
}
}
打包APK
先在unity里再另外导出一次安卓工程,将导出目录里面的src\main\assets\bin文件夹拷贝到第一次我们设置好的Android Studio工程目录下同样路径并替换里面的bin文件夹。
然后用Android Studio打包APK,不会的看这里==>Android Studio 超级简单的打包生成apk
到这里就已经结束了~~~
最后说点啥
我在保证代码尽量简洁和步骤尽量少的情况下编写这个demo,只是希望大家可以熟悉整个的操作,而具体原理别人都讲的很清楚了,我就不再赘述。
DEMO
百度网盘