получить сообщение от луча Android в формах xamarin

Я разрабатываю кроссплатформенное мобильное приложение, использующее NFC. Я уже проверил пример xamarin android beam здесь. Теперь я пытаюсь реализовать тот же образец, используя формы xamarin, поэтому я использую службу зависимостей для вызова функции из проекта Android.

Я уже создаю сообщение Ndef и функцию отправки:

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){}

    }


}

Однако я действительно не знаю, как получить сообщение. В образце луча Android они реализуют его в основной активности. Вот образец:

    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 ());
    }

Итак, я хочу реализовать в файле класса, чтобы я мог использовать dependencyService. Есть ли способ реализовать это?

Изменить: я выполнил функцию отправки:

        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;
        } 

Но он возвращается как «НОВЫЙ ТЕГ СОБРАН: application/com.companyname.MyApp». Я хочу возобновить MyApp и показать сообщение. Но это не так.


person shaft95    schedule 02.08.2018    source источник
comment
Я бы использовал MessagingService для отправки сообщения из вашего MainActivity в ваш код Forms при получении сообщения.   -  person Jason    schedule 02.08.2018
comment
Вы также можете использовать IOC/DI и создать ViewModel, в котором ваши MainActivity и Page используют один и тот же экземпляр.   -  person Nick Peppers    schedule 02.08.2018
comment
обновленный вопрос   -  person shaft95    schedule 05.08.2018
comment
См. раздел stackoverflow.com/q/38410047/2425802 о том, как зарегистрировать фильтры намерений или диспетчеризацию переднего плана для NFC.   -  person Michael Roland    schedule 07.08.2018