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還沒研究


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM