Unity实战篇:实现安卓手机的复制粘贴功能(与原生Android交互)

版权声明:转载请注明出处!不注明也无所谓,嘿嘿。 https://blog.csdn.net/qq_15020543/article/details/82977226

1.安卓方面的准备和代码编写

准备:必看https://blog.csdn.net/qq_15020543/article/details/82976850先不要导出aar或jar包

代码编写:参考自https://blog.csdn.net/mseol/article/details/78518754#commentsedit

在自己的Library新建一个类

package com.li.copy;

import android.app.Fragment;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.ClipData;

import com.unity3d.player.UnityPlayer;

public class MyPluginClass extends Fragment //注意,这里继承的是Fragment。要具体理解可以了解下 Android Activity 的层级结构
{
    private static final String TAG = "Plugin";
    private static MyPluginClass Instance = null;
    private String gameObjectName;
    public static MyPluginClass GetInstance(String gameObject)
    {
        if(Instance == null)
        {
            Instance = new MyPluginClass();
            Instance.gameObjectName = gameObject;
            UnityPlayer.currentActivity.getFragmentManager().beginTransaction().add(Instance, TAG).commit();
        }
        return Instance;
    }

    //拷贝String到剪贴板
    public void onClickCopy(String str) {
        //获取剪贴板管理器:
        ClipboardManager cm = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
        // 创建普通字符型ClipData
        ClipData mClipData = ClipData.newPlainText("Label", str); //Label是任意文字标签
        // 将ClipData内容放到系统剪贴板里。
        cm.setPrimaryClip(mClipData);
    }

    //粘贴
    public String onClickPaste(){
        ClipboardManager cm = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
        String result = "";
        ClipData clipData = cm.getPrimaryClip();
        ClipData.Item item = clipData.getItemAt(0); //这里获取第一条,也可以用遍历获取任意条
        CharSequence charSequence = item.coerceToText(getActivity().getApplicationContext());
        result = charSequence.toString();
        return result;
    }
}

根据需求导出aar/jar包,并放在Unity指定位置

2.创建Unity场景

Unity代码

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class name : MonoBehaviour
{
    AndroidJavaObject jo = null;
    public Text text1;
    public Text text2;
    void Start()
        {
            AndroidJavaClass jc = new AndroidJavaClass("com.li.copy.MyPluginClass"); //和java代码包名统一
            jo = jc.CallStatic<AndroidJavaObject>("GetInstance", gameObject.name); //Main Camera
        }

        public void OnCopy()
        {
            jo.Call("onClickCopy", text1.text);
        }

        public void OnPaste()
        {
            text2.text = jo.Call<string>("onClickPaste");
        }


}

把脚本挂在到Directional Light上

给两个Button绑定方法

打包,真机测试。

总结:我学到了很多,Android环境,导包,通信,第三方SDK的引入。另外针对这个功能我说一下,函数方法都提供好了,只需要在需要用到的地方调用就可以了。参考案例

猜你喜欢

转载自blog.csdn.net/qq_15020543/article/details/82977226
今日推荐