0

I'm develop cross-platform mobile application that use NFC. I already check the xamarin android beam sample here. Now i'm trying implement the same sample using xamarin forms so i'm using dependency service to call the function from android project.

I already create Ndef message and send function:

using System;
using System.Text;
using Android.App;
using MyApp.Droid;
using Android.Nfc;
using Xamarin.Forms;

[assembly: Dependency(typeof(PhoneBeam))]
namespace MyApp.Droid
{
    public class PhoneBeam : Activity, NfcAdapter.ICreateNdefMessageCallback, NfcAdapter.IOnNdefPushCompleteCallback, iBeam
    {
        private NfcAdapter nfcAdapter;
        public void Beam()
        {
            nfcAdapter = NfcAdapter.GetDefaultAdapter(MainActivity.Instance);
            nfcAdapter.SetNdefPushMessageCallback(this, MainActivity.Instance);
            nfcAdapter.SetOnNdefPushCompleteCallback(this, MainActivity.Instance);
        }

        public NdefMessage CreateNdefMessage(NfcEvent evt)
        {
            DateTime time = DateTime.Now;
            var text = ("Beam me up!\n\n" + "Beam : " +
                time.ToString("HH:mm:ss"));
            NdefMessage msg = new NdefMessage(
                new NdefRecord[]{ CreateMimeRecord (
            "application/com.companyname.MyApp",
            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;
        }
        public void OnNdefPushComplete(NfcEvent e){}

    }


}

However, I really don't know how to receive a message. In android beam sample, they implement it in mainactivity. Here's sample:

    protected override void OnResume ()
    {
        base.OnResume ();
        if (NfcAdapter.ActionNdefDiscovered == Intent.Action) {
            ProcessIntent (Intent);
        }
    }

    void ProcessIntent (Intent intent)
    {
        IParcelable [] rawMsgs = intent.GetParcelableArrayExtra (
            NfcAdapter.ExtraNdefMessages);
        NdefMessage msg = (NdefMessage) rawMsgs [0];
        mInfoText.Text = Encoding.UTF8.GetString (msg.GetRecords () [0].GetPayload ());
    }

So i want to implement in class file so i can use dependencyService. Is there a way to implement this?

Edit: I did the send function:

        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.companyname.MyApp", Encoding.UTF8.GetBytes (text))

            });
            return msg;
        } 

But it return as "NEW TAG COLLECTED: application/com.companyname.MyApp". I want to resume MyApp and show the message. But it didn't.

shaft95
  • 3
  • 2

0 Answers0