LoginSignup
22
19

More than 5 years have passed since last update.

UnityのAndroidでコピーにはまった

Last updated at Posted at 2014-06-06

Unity Android ClipBoard Plugin

先日UnityからAndroidのクリップボードを操作しようとすると「Can't create handler inside thread that has not called Looper.prepare()」とエラーを吐く。

たぶんUIスレッドを使うなりしてLooperを初期化しないといけないのだろう。
UnityとAndroidのUIスレッドは別々のスレッドで動いているみたいだし。

そんなわけでrunOnUiThreadを使ってUIのスレッドで実行したらうまくいった。
あと、iOSは数行で書けて凄い簡単でした。

ClipBoard.cs
using UnityEngine;
using System.Collections;

public class ClipBoard {

  public static void ExportString(string exportData){
    AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject activity = jc.GetStatic<AndroidJavaObject>("currentActivity");

    activity.Call("runOnUiThread", new AndroidJavaRunnable(() =>
    {
      AndroidJavaObject clipboardManager = activity.Call<AndroidJavaObject>("getSystemService","clipboard");
      //clipboardManager.Call("setText", exportData);
      AndroidJavaClass clipDataClass = new AndroidJavaClass("android.content.ClipData");
      AndroidJavaObject clipData = clipDataClass.CallStatic<AndroidJavaObject>("newPlainText","simple text", exportData);
      clipboardManager.Call("setPrimaryClip",clipData);
    }));
  }
}

22
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
19