unity3d android平台剪贴板的实现

也是在网上翻了很多资料,这里参考了一下网友的http://www.cnblogs.com/xiaozefeng/p/Unity_Android_IOS.html

但是他写的不全,导致写android程序eclipse最后会报错

他这里写道

Unity3D调用Android剪贴板

public class ClipboardTools {
  public static ClipboardManager clipboard = null;
  // 向剪贴板中添加文本
  public void copyTextToClipboard(final Context context, final String str) {
    if (Lopper.myLooper() == null){
      Looper.prepare();
    }
    clipboard = (ClipboardManager) activity.getSystemService(Activity.CLIPBOARD_SERVICE);
    ClipData textCd = ClipData.newPlainText("data", str);
    clipboard.setPrimaryClip(textCd);
    handler.getLooper().quit();
  }
  // 从剪贴板中获取文本
  public 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;
  }
}

然而运行程序,必然报错

解决办法如下,以函数 向剪贴板中添加文本 为例因当新起一线程,代码如下

    public void copyTextToClipboard(final Context activity, final String str) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                Looper.prepare();
                m_handler = new Handler()
                {
                    public void handleMessage(Message msg)
                    {
                        clipboard = (ClipboardManager) activity.getSystemService(Activity.CLIPBOARD_SERVICE);
                        ClipData textCd = ClipData.newPlainText("data", str);
                        clipboard.setPrimaryClip(textCd);
                    }
                };
                Message message = new Message();
                m_handler.sendMessage(message);
                Looper.loop();
            }
            }).start();
    }

这样就正确了

接下来:

Android剪贴板项目导入Unity3D

1. 在Untiy3D项目的Assets目录下创建Plugins目录。

2. 在Plugins目录下创建Android目录。

3. 在Android 目录下创建bin目录。

4. 在bin 目录下放置你编写的类的jar包。

然后

Unity3D调用Android类与方法

#if UNITY_ANDROID 

AndroidJavaObject androidObject = new AndroidJavaObject("com.test.ClipboardTools");
AndroidJavaObject activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
if (activity == null)
    return ;

     // 复制到剪贴板
    androidObject.Call("copyTextToClipboard", activity, input);

     // 从剪贴板中获取文本
     String text =androidObject.Call<String>("getTextFromClipboard");

#endif

ok,ios还没研究

时间: 2024-08-07 19:06:41

unity3d android平台剪贴板的实现的相关文章

Unity3D在Android平台使用嵌入式数据库Sqlite,解决无法找到数据库文件的问题

做一个需要嵌入式数据库Sqlite 的unity3d项目,在pc机上运行良好,需要发布到Android平台上,于是,各种坑爹...会遇到找不到数据库文件的问题.当在pc机上使用sqlite时,当执行SqliteConnection dbConnection = new SqliteConnection("data source = test.db");语句时,如果有这个数据库文件则建立连接,如果没有则创建出这个文件,然后建立连接.当在Android平台上时,扯淡的事情就开始了,总之便不

Unity3D之移植学习笔记:移植到Android平台

首先,我们需要一台已经配置好可以开发Android应用的计算机,这里我使用的是Windows系统+Eclipse+ADT的开发环境,当然也可以使用Android Studio或者使用Mac系统都可以. 导出到Eclipse 设置U3D工程 首先需要设置游戏的平台为Android: 在Player Settings...面板中记得设定一下: 这个名称需要设定. 导出Android工程 设定好Android的配置之后,我们需要对Android工程进行导出,我们仍然点击Builder Setting,

「Unity」与iOS、Android平台的整合:3、导出的Android-Studio工程

本文属于「Unity与iOS.Android平台的整合」系列文章之一,转载请注明出处. Unity默认导出的是Android-Eclipse工程,毕竟Eclipse for Android开发在近一两年才开始没落,用户量还是非常巨大的. 个人认为AndroidStudio非常好用,能轻易解决很多Eclipse解决不了或者很难解决的问题. 所以我将Unity导出的Andoid工程分为Eclipse和AndroidStudio两部分. 不过我之后的相关内容都会使用AndroidStudio,希望依然

「Unity」与iOS、Android平台的整合:2、导出的Android-Eclipse工程

本文属于「Unity与iOS.Android平台的整合」系列文章之一,转载请注明出处. Unity默认导出的是Android-Eclipse工程,毕竟Eclipse for Android开发在近一两年才开始没落,用户量还是非常巨大的. 个人认为AndroidStudio非常好用,能轻易解决很多Eclipse解决不了或者很难解决的问题. 所以我将Unity导出的Andoid工程分为Eclipse和AndroidStudio两部分. 不过我之后的相关内容都会使用AndroidStudio,希望依然

「Unity」与iOS、Android平台的整合:1、导出的Xcode工程

本文属于「Unity与iOS.Android平台的整合」系列文章之一. 本文主要讲解Unity导出的Xcode工程的目录结构. 我所用软件的版本: Unity 5.3.5f1 Xcode 7.3 前导步骤 第一步,创建一个新的工程 Build_to_iOS_Android 第二步,创建一个新文件 CSharpToCPP.cs using UnityEngine; public class CSharpToCPP { public void Func(int num) { if (num < 1)

针对Android平台我们需要学习如何在Unity中调用Android的JAVA代码。

Unity for Android 比较特殊,Unity for IOS 打包是将XCODE工程直接交给开发者,开发者可以在工程的基础上继续添加新的视图,最后由开发者自行打包生成IPA包,发布程序.而Unity for Android打包直接生成APK包,等于说源代码开发者是看不到的,但是Unity的自身确实有些局限,针对Android平台我们需要学习如何在Unity中调用Android的JAVA代码.本章我们的目标是使用Unity的脚本打开Activity.首先我们创建一个普通的Android

基于ANDROID平台,U3D对蓝牙手柄键值的获取

对于ANDROID平台,物理蓝牙手柄已被封装,上层应用不可见,也就是说对于上层应用,不区分蓝牙手柄还是其它手柄: 完成蓝牙手柄和ANDROID手机的蓝牙连接后,即可以UNITY3D中获取其键值: 在U3D中已有对手柄键值的获取接口,主要分两类: 1.摇杆: translationy = Input.GetAxis("Vertical") * 10.0f; translationx = Input.GetAxis("Horizontal") * 10.0f; Inpu

Unity Handheld.PlayFullScreenMovie 视频播放 (android平台 资源存放路径)

对于在Unity中播放视频的用法,这里有篇文章说的很详细了,参考 Unity3D研究院之两种方式播放游戏视频 本文主要针对Android平台调用的视频资源存放位置写个备注. 移动平台视频播放调用的接口如下: public static bool PlayFullScreenMovie(string path, Color bgColor, FullScreenMovieControlMode controlMode, FullScreenMovieScalingMode scalingMode)

Unity3d Android SDK接入解析(四)通用的Android SDK接入中间件

一.前言 接入Android SDK正式告一段落,在这段时间里面,依次接入了华为.应用宝.小米.360等等大大小小十来个SDK,也算对Unity接入渠道SDK有了较为全面的理解,对各个渠道的坑也算深有体会....在接入过程中时间比较紧张,没办法抽空来进行总结深思.今天正好有空,便对之前的接入SDK的代码进行了一次重构,写了一个比较通用的Unity接入Android SDK的中间件,前人栽树,后人乘凉. 进入正题 如果有对一些只是有疑问的,可以看看我之前的三篇文章: 传送门: Unity3d An