상세 컨텐츠

본문 제목

Xamarin.Forms 자마린의 기초(3) - 네이티브 기능 사용 - 진동 기능 사용

Xamarin

by 경밤 2021. 2. 12. 19:28

본문

반응형

자마린 Forms에서 코딩을 하다 보면 Android 프로젝트에서만 사용가능해 보이는 코드들이 있다.

이때 공용 프로젝트에서 쓰기 위한 방법으로는 다른 Cross Platform 플러그인을 다운로드하거나, 이 글에서 설명할 방법을 쓰면 된다.

예시로, Android.App.Application.Context.GetSystemService는 안드로이드 프로젝트에서만 사용가능하다. 그러므로, 안드로이드 프로젝트에서 이 기능을 사용하는, 그래서 진동 기능을 하는 클래스를 만들어보겠다.

그러기 위해서는 두개의 파일을 각각의 프로젝트에 만들어야한다. 

1. 공용 프로젝트에 클래스의 함수 이름을 담은 인터페이스 

namespace HeVibrates
{
    public interface IVibratorDevice
    {
        void Run(long[] pattern);
        void Stop();
    }
}

Run과 Stop 기능만 쓸것이다.

2. Android 프로젝트에 사용하고자 하는 기능을 수행하는 클래스

using Android.Content;
using Android.OS;
using Xamarin.Forms;
using 프로젝트이름.Droid;

[assembly: Dependency(typeof(VibratorDevice))]
namespace 프로젝트이름.Droid
{
    public class VibratorDevice : IVibratorDevice
    {
        [Obsolete]
        public void Run(long[] pattern)
        {
            var v = (Vibrator)Android.App.Application.Context.GetSystemService(Context.VibratorService);

            v.Vibrate(pattern, 0); //0이라서 무한반복이다.
        }

        public void Stop()
        {
            var v = (Vibrator)Android.App.Application.Context.GetSystemService(Context.VibratorService);

            v.Cancel();
        }

    }
}

중요한점은 using Xamarin.Forms의 Dependency이다. 이것으로 인해서 공용프로젝트에서 저 VibratorDevice를 가져와 사용할 수 있다는 점이다.

공용 프로젝트에서 아래와 같이 사용할 수 있다.

DependencyService.Get<IVibratorDevice>().Run(new long[] { 0, 1000, 0});

long 배열의 뜻을 정리하자면 순서대로 0초 시작 딜레이며 1초간 지속하며, 0초 다시 쉰다는 것이다.

반응형

관련글 더보기