从Android Beam接收xamarin形式的消息

时间:2018-08-02 14:16:23

标签: xamarin.forms android-beam

我正在开发使用NFC的跨平台移动应用程序。我已经检查了xamarin android Beam示例here。现在,我正在尝试使用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 beam示例中,他们在mainactivity中实现了它。这是示例:

    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并显示消息。但事实并非如此。

0 个答案:

没有答案