Unity는 모바일 클립 보드를 가져오고 클립 보드 작업을 작성합니다.

        유니티는 PC 측에서 개발 되었기 때문에 ios 나 안드로이드 시스템의 일부 라이브러리를 직접 호출 할 수 없습니다. 일반적으로 유니티 어플리케이션이 휴대폰의 클립 보드를 구하거나 쓰기가 필요한 경우 기본적으로 Xcode 또는 andriod를 통해 이루어집니다. Studio는 해당 메소드 라이브러리를 컴파일 한 다음 Unity 애플리케이션 프로젝트의 플러그인 폴더에 해당하는 ios 또는 android 폴더로 가져온 다음 참조합니다.

        예를 들어 휴대폰의 클립 보드 정보를 얻기 위해 통일을 취하십시오 .iOS와 안드로이드의 코드는 다르지만 원칙은 동일합니다. 기본 코드를 통해 하단에서 해당 클립 보드의 권한과 정보를 얻습니다. 읽어 오기 또는 쓰기 작업입니다.

기계적 인조 인간

Android의 경우 Android 스튜디오에서 빈 애플리케이션을 만들고 클립 보드 도구 클래스를 만든 다음 마지막으로 jar 패키지를 생성해야합니다. 인터넷에서 jar 패키지를 생성하는 방법에 대한 많은 자습서가 있습니다. as로 jar 패키지 출력을 모르는 경우 직접 Baidu를 사용할 수 있습니다.

Android 도구 코드는 아래에 첨부되어 있습니다.

package com.example.getclipboard;

import android.app.Activity;
import android.content.ClipData;
import android.content.ClipDescription;
import android.content.ClipboardManager;
import android.content.Context;

public class ClipboardTools {

    public   static ClipboardManager clipboard =  null ;

    // 向剪贴板中添加文本
    public void copyTextToClipboard(final Context activity, final String str) throws Exception  {
        clipboard = (ClipboardManager) activity.getSystemService(Activity.CLIPBOARD_SERVICE);
        ClipData textCd = ClipData.newPlainText( "data" , str);
        clipboard.setPrimaryClip(textCd);
    }

    // 从剪贴板中获取文本
    public String getTextFromClipboard()  {
    clipboard = (ClipboardManager) activity.getSystemService(Activity.CLIPBOARD_SERVICE);
        if  (clipboard.hasPrimaryClip()
                && clipboard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) {
            ClipData cdText = clipboard.getPrimaryClip();
            ClipData.Item item = cdText.getItemAt(0);
            return  item.getText().toString();
        }
        return   "" ;
    }
}

압축 해제 소프트웨어로 생성 된 jar를 열면 해당 파일 레벨 형식이 기본적으로 com.xx.xxx.xxxx 형식 인 패키지 구조에 해당함을 알 수 있습니다.이 형식은 jar의 문자와 일치해야합니다. Unity String 대응에서 얻은 클래스는 아래에서 자세히 설명합니다.

생성 된 jar 패키지를 Unity 프로젝트의 루트 디렉토리에있는 플러그인의 andriod 폴더에 넣습니다. 그렇지 않은 경우 직접 만들 수 있습니다.

Unity에서 생성 된 jar 패키지의 클래스는 AndroidJavaObject 클래스를 통해 가져옵니다. 코드는 다음과 같습니다.

                #if UNITY_ANDROID
                AndroidJavaObject androidObject = new AndroidJavaObject("com.zengqi.clipboardapp.ClipboardTools");
                AndroidJavaObject activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
                if (activity != null)
                {
                    //获取剪切板
                    str = androidObject.Call<String>("getTextFromClipboard",activity);
                    //写入剪切板
                    androidObject.Call("copyTextToClipboard", activity, str);
                    
                }
                #endif

위 코드에서 com.zengqi.clipboardapp.ClipboardTools의 문자열입니다. 여기서 com.zengqi.clipboardapp은 패키지 이름을 나타내고 ClipboardTools는 클립 보드의 도구 클래스를 나타냅니다. 다음 줄의 활동은 Android에서 Unity로 인스턴스화 된 활동이며, Android와 Unity는이 활동을 통해 데이터를 교환합니다.

 

IOS 끝

ios 쪽은 Android보다 조금 더 편리합니다. xcode에서 작업 할 필요가 없습니다. 플러그인 폴더 아래의 ios 폴더에 해당 클래스와 헤더 파일을 추가하기 만하면됩니다.

먼저 plugins / ios / 폴더 아래에 해당 .h 파일과 .mm 파일을 생성합니다.이 파일은 텍스트 파일에 직접 쓸 수 있으며 마지막 파일은 해당 .h 및 .mm 파일로 수정할 수 있습니다.

.h 파일

#import <Foundation/Foundation.h>
@ interface Clipboard : NSObject
extern "C"
{
void _copyTextToClipboard(const char *textList);
const char* _GetClipboardText();
}
@end

.mm 파일

#import "Clipboard.h"
@implementation Clipboard
- (void)objc_copyTextToClipboard : (NSString*)text
{
     UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
     pasteboard.string = text; 
}

  - (NSString*)GetClipboardText
  {
      UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
      return pasteboard.string;
  }

@end

extern "C" {
     static Clipboard *iosClipboard;
   
    char* _MakeStringCopy(const char* str)
    {
        if(str==NULL){ return NULL;}
        char* res=(char*)malloc(strlen(str)+1);
        strcpy(res,str);
        return res;
    }
    
     void _copyTextToClipboard(const char *textList) 
    {   
        NSString *text = [NSString stringWithUTF8String: textList] ;        
        if(iosClipboard == NULL)
        {
            iosClipboard = [[Clipboard alloc] init];
        }     
        [iosClipboard objc_copyTextToClipboard: text]; 
    }

const char* _GetClipboardText()
{
    if(iosClipboard == NULL)
        {
            iosClipboard = [[Clipboard alloc] init];
        }  
       return _MakeStringCopy([[iosClipboard GetClipboardText] UTF8String]);
}    
}

위의 두 클래스를 만든 후 호출해야하는 C # 클래스에서 참조 할 수 있습니다.

#if UNITY_IPHONE
   
        [DllImport("__Internal")]
        private static extern void _copyTextToClipboard(string text);

        [DllImport("__Internal")]
        private static extern string _GetClipboardText();
#endif

위의 참조를 정의한 후 클립 보드 메서드를 직접 참조 할 수 있습니다.

#if UNITY_IPHONE
		    //获取剪切板的内容
            _GetClipboardText();
            //将字符串写入剪切板
		    _copyTextToClipboard (input);
	        
#endif

 

추천

출처blog.csdn.net/ssssssilver/article/details/109730514