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);
}));
}
}