处理从Unity到iOS和Android的剪贴板


2019.7 更新
unity 2019版好像有api了,不用再自己提供原生插件

    Debug.Log($"剪贴板文本 = {GUIUtility.systemCopyBuffer}");
    GUIUtility.systemCopyBuffer = "新剪贴板文本";

不过这个我还没有试过,大家可以尝试一下


2018.7 更新
这个写的时间很久了,文中提供的Apk与现在的安卓版本不匹配,大家就不要下载安装了,本文主要是提供一个思路


这些是你需要了解的:

  • Unity3D 调用Android与IOS的剪贴板
  • Unity3D与iOS、Android的交互

我这里主要是讲解这两篇博客结合了一下,改变的地方是将第一篇中安卓交互的方式由导入编译的jar包改为将unity工程导出Android Studio工程,将原生java代码放到as工程里再打包。因为现在公司里面接入SDK和进行原生功能开发都是基于这样的步骤。我这里只讲解流程,原理请看上面两篇博客。

新建unity工程
创建场景如下
处理从Unity到iOS和Android的剪贴板_第1张图片
一个将文本复制进剪切板的按钮,一个获取剪切板文本的按钮

导出Android工程并打开
这里你可能需要配置安卓环境,但不在本篇内容范围内
步骤在这里==>导出的Android-Studio工程
我的是2017.3版本,和之前老版本有些不一样,需要设置红框内选项
处理从Unity到iOS和Android的剪贴板_第2张图片

创建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
百度网盘

你可能感兴趣的:(Unity)