2019/06/18 - [프로그래밍/안드로이드-자마린폼즈] - Xamarin Forms 에서 클립보드 이벤트 처리 1
이전글에 이어 이벤트를 PCL 프로젝트에서 받아서 처리하는 코드 예제를 작성하였다.
여러가지 방법이 있겠지만 일단 생각나는데로 구현해 보았다.
사실 모바일 및 xamarin 프로젝트가 처음이라 내맘데로 구현했다.
예제는 클립보드에 텍스트가 복사되었을 때 이벤트를 현재 떠있는 화면에 전달하여 처리한다.
PCL 프로젝트
현재 페이지를 가져와서 Clipboard 이벤트를 처리하는 페이지인지 판단 후
처리하는 페이지일 경우, 페이지의 함수를 호출하여 text를 넘겨준다. text처리는 각 페이지에서 구현하면 된다.
ClipboardServiceManager.cs
public class ClipboardServiceManager
{
public void SetText(string text)
{
Page curPage = Application.Current.MainPage;
if(curPage is NavigationPage)
{
if (((NavigationPage)curPage).CurrentPage is IScanPage)
{
((IScanPage)((NavigationPage)curPage).CurrentPage).Scan(text);
}
}
}
}
Clipboard 이벤트를 처리하는 페이지는 아래 인터페이스를 상속하도록 한다.
IScanPage.cs
interface IScanPage
{
void Scan(string text);
}
아래처럼 인터페이스 상속 후 Scan 함수를 구현하여 처리한다.
Example.cs
public partial class Example : ContentPage, IScanPage
{
public Example()
{
InitializeComponent();
}
public void Scan(string text)
{
;
}
}
Android 프로젝트와의 인터페이싱을 위해 App.cs 에 ClipboardServiceManager 클래스를 static으로 선언한다.
App.cs
public partial class App
{
public static ClipboardServiceManager ScanManager { get; set; }
public App() : this(null) { }
public App(IPlatformInitializer initializer) : base(initializer) { }
protected override void OnStart()
{
base.OnStart();
if (Device.RuntimePlatform == Device.iOS)
{
}
if (Device.RuntimePlatform == Device.Android)
{
}
}
}
Android 프로젝트
MainActivity에서 PCL 프로젝트의 Clipboard Manager를 생성하고 Clipboard 이벤트 발생 시 데이터를 전달한다.
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate(Bundle bundle)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(bundle);
ClipboardManager clipManager = (ClipboardManager)GetSystemService(ClipboardService);
clipManager.PrimaryClipChanged += clipManager_PrimaryClipChanged;
App.ScanManager = new ClipboardServiceManager();
global::Xamarin.Forms.Forms.Init(this, bundle);
LoadApplication(new App(new AndroidInitializer()));
}
private void clipManager_PrimaryClipChanged(object sender, EventArgs e)
{
App.ScanManager.SetText( ((ClipboardManager)sender).Text );
}
}
'프로그래밍 > 안드로이드-자마린폼즈' 카테고리의 다른 글
설치시 실행 아이콘 두개가 생기는 경우 (0) | 2019.11.22 |
---|---|
Xamarin Forms 에서 클립보드 이벤트 처리 1 (0) | 2019.06.18 |
EventToCommandBehavior in Prism (0) | 2019.06.18 |
안드로이드에서 공용디렉토리의 절대경로를 얻는방법 (0) | 2019.05.09 |
안드로이드 스튜디오 (android studio) Rendering Problems (0) | 2016.01.13 |