您的位置:首页 > 移动开发 > Unity3D

Unity使用Android系统剪贴板复制&粘贴

2017-11-13 11:58 405 查看
Unity3d开发的移动应用,默认只有在InputField输入文本时,可以调用系统剪贴板(ex.吐槽下Unity引擎键盘的Layout十分不人机)。如果有类似选中某个文本,复制其中内容的需求,就要使用原生插件来提供这个方法了。如:



开发原生插件的流程应该已经有很多教程了,这个不再重复,直接贴Java代码。因为身边的Java朋友推荐,我倾向于使用AndroidStudio。
1. Java代码package com.company.product;

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

//import com.unity3d.player.UnityPlayer;
//import com.unity3d.player.UnityPlayerActivity;

public class NativePlugin extends Fragment //注意,这里继承的是Fragment,懂的朋友也可以改成UnityPlayerActivity或没有继承
{
private static final String TAG = "Plugin";
private static NativePlugin Instance = null;
private String gameObjectName;
public static NativePlugin GetInstance(String gameObject)
{
if(Instance == null)
{
Instance = new NativePlugin();
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();
//result = cm.toString(); //ClipData{ text/plain "Label"{T:"str"}}; //取出的是ClipData
//result = cm.getText().toString(); //"str" //方法deprecated
ClipData.Item item = clipData.getItemAt(0); //这里获取第一条,也可以用遍历获取任意条
CharSequence charSequence = item.coerceToText(getActivity().getApplicationContext());
result = charSequence.toString();
return result;
}
}
2. 因为没有继承Activity,编译输出后,只需要拷贝*.jar包到Unity工程下/Plugins/Android/libs,不需要AndroidManifeset。
3. C#代码,分别去Call() Java Code中的两个方法。
public class AndroidImpl : MonoBehaviour
{
void Start()
{
AndroidJavaClass jc = new AndroidJavaClass("com.company.product.MyPluginClass"); //和java代码包名统一
jo = jc.CallStatic<AndroidJavaObject>("GetInstance", gameObject.name); //Main Camera
}

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

public void OnPaste()
{
clipText.text = jo.Call<string>("onClickPaste");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity java 插件 剪贴板