Share via


Android Beam

Android Beam은 애플리케이션이 근접한 거리에서 NFC를 통해 정보를 공유할 수 있는, Android 4.0에 도입된 NFC(근거리 통신) 기술입니다.

근접한 두 디바이스가 정보를 공유하는 모습을 보여 주는 다이어그램

Android Beam은 두 디바이스가 범위 내에 있을 때 NFC를 통해 메시지를 푸시하는 방식으로 작동합니다. 서로 약 4cm에 있는 디바이스는 Android Beam을 사용하여 데이터를 공유할 수 있습니다. 한 디바이스에서 작업이 메시지를 만들고 메시지 푸시를 처리할 수 있는 작업을 지정합니다. 지정된 작업이 포그라운드에 있고 디바이스가 범위 안에 있는 경우 Android Beam은 메시지를 두 번째 디바이스로 푸시합니다. 수신 디바이스에서 메시지 데이터를 포함하는 의도가 호출됩니다.

Android는 Android Beam을 사용하여 메시지를 설정하는 두 가지 방법을 지원합니다.

  • SetNdefPushMessage -Android Beam이 시작되기 전에 애플리케이션이 SetNdefPushMessage를 호출하여 NFC를 통해 푸시할 NdefMessage와 이를 푸시하는 작업을 지정할 수 있습니다. 애플리케이션을 사용하는 동안 메시지가 변경되지 않는 경우 이 메커니즘을 사용하는 것이 가장 좋습니다.

  • SetNdefPushMessageCallback - Android Beam이 시작되면 애플리케이션은 콜백을 처리하여 NdefMessage를 생성할 수 있습니다. 이 메커니즘을 사용하면 디바이스가 범위 안에 있을 때까지 메시지 만들기를 지연할 수 있습니다. 이 메커니즘은 애플리케이션에서 발생하는 상황에 따라 메시지가 달라질 수 있는 시나리오를 지원합니다.

어떤 경우든 Android Beam으로 데이터를 전송하기 위해 애플리케이션은 NdefMessage를 보내고 데이터를 여러 NdefRecords로 패키지합니다. Android Beam을 트리거하기 전에 해결해야 하는 주요 요소에 대해 살펴보겠습니다. 먼저 NdefMessage를 만드는 콜백 스타일부터 알아봅니다.

메시지 생성

작업의 OnCreate 메서드에서 NfcAdapter를 사용하여 콜백을 등록할 수 있습니다. 예를 들어 mNfcAdapter라는 NfcAdapter가 작업에서 클래스 변수로 선언된다고 가정할 때 다음 코드를 작성하여 메시지를 생성하는 콜백을 만들 수 있습니다.

mNfcAdapter = NfcAdapter.GetDefaultAdapter (this);
mNfcAdapter.SetNdefPushMessageCallback (this, this);

NfcAdapter.ICreateNdefMessageCallback를 구현하는 작업이 위의 SetNdefPushMessageCallback 메서드에 전달됩니다. Android Beam이 시작되면 시스템은 아래와 같이 활동이 NdefMessage를 생성할 수 있는 CreateNdefMessage를 호출합니다.

public NdefMessage CreateNdefMessage (NfcEvent evt)
{
    DateTime time = DateTime.Now;
    var text = ("Beam me up!\n\n" + "Beam Time: " +
        time.ToString ("HH:mm:ss"));
    NdefMessage msg = new NdefMessage (
        new NdefRecord[]{ CreateMimeRecord (
            "application/com.example.android.beam",
            Encoding.UTF8.GetBytes (text)) });
        } };
    return msg;
}

public NdefRecord CreateMimeRecord (String mimeType, byte [] payload)
{
    byte [] mimeBytes = Encoding.UTF8.GetBytes (mimeType);
    NdefRecord mimeRecord = new NdefRecord (
        NdefRecord.TnfMimeMedia, mimeBytes, new byte [0], payload);
    return mimeRecord;
}

메시지 수신

수신 쪽 시스템은 다음과 같이 NdefMessage를 추출할 수 있는 ActionNdefDiscovered 작업을 포함하는 의도를 호출합니다.

IParcelable [] rawMsgs = intent.GetParcelableArrayExtra (NfcAdapter.ExtraNdefMessages);
NdefMessage msg = (NdefMessage) rawMsgs [0];