如何使用NFC和Xamarin.Android发送消息?

如何使用NFC和Xamarin.Android发送消息?,xamarin.android,nfc,ndef,Xamarin.android,Nfc,Ndef,我正在开发和应用程序来演示NFC是如何工作的。我的目标是制作一款和Android Beam非常相似的应用程序。我正在使用Xamarin.Android。目标是在一台设备上输入消息,按下按钮,它就会被发送到另一台设备,并在该设备上显示相同的应用程序。我尝试了几乎所有的东西,甚至是文档,但似乎都不起作用。有没有人对这项技术有经验?这项技术现在还可用吗 下面是我的一些代码,让您了解我正在尝试做什么: protected override void OnCreate(Bundle savedIn

我正在开发和应用程序来演示NFC是如何工作的。我的目标是制作一款和Android Beam非常相似的应用程序。我正在使用Xamarin.Android。目标是在一台设备上输入消息,按下按钮,它就会被发送到另一台设备,并在该设备上显示相同的应用程序。我尝试了几乎所有的东西,甚至是文档,但似乎都不起作用。有没有人对这项技术有经验?这项技术现在还可用吗

下面是我的一些代码,让您了解我正在尝试做什么:

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        SetContentView(Resource.Layout.activity_main);

        mNfcAdapter = NfcAdapter.GetDefaultAdapter(this);


        myButton.Click += (e, o) => { 
            mNfcAdapter.SetNdefPushMessageCallback(this, this);
            mNfcAdapter.SetOnNdefPushCompleteCallback(this, this);
            };
    }

   public NdefMessage CreateNdefMessage(NfcEvent e)
    {
        DateTime time = DateTime.Now;
        var text = (time.ToString("HH:mm:ss") + message2);
        NdefMessage msg = new NdefMessage(
        new NdefRecord[] { CreateMimeRecord (
            text, Encoding.UTF8.GetBytes (text))});
        return msg;
    }

    private 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)
    {
        Toast.MakeText(this.ApplicationContext, "Message sent", ToastLength.Long).Show();
    }

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

    protected override void OnNewIntent(Intent intent)
    {
        Intent = intent;
    }

    void ProcessIntent(Intent intent)
    {
        IParcelable[] rawMsgs = intent.GetParcelableArrayExtra(
            NfcAdapter.ExtraNdefMessages);
        NdefMessage msg = (NdefMessage)rawMsgs[0];
        var textViewMsg = FindViewById<TextView>(Resource.Id.textViewMsg);
        textViewMsg.Text = Encoding.UTF8.GetString(msg.GetRecords()[0].GetPayload());
    }
protectedoverride void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(这个,savedInstanceState);
SetContentView(Resource.Layout.activity_main);
mNfcAdapter=NfcAdapter.GetDefaultAdapter(此);
我的按钮。单击+=(e,o)=>{
mNfcAdapter.SetNdefPushMessageCallback(this,this);
mNfcAdapter.SetOnNdefPushCompleteCallback(this,this);
};
}
公共NdefMessage CreateNdefMessage(NfcEvent e)
{
DateTime=DateTime.Now;
var text=(time.ToString(“HH:mm:ss”)+message2);
NdefMessage msg=新的NdefMessage(
新NdefRecord[]{CreateMimeRecord(
text,Encoding.UTF8.GetBytes(text))};
返回味精;
}
私有NdefRecord CreateMimeRecord(字符串mimeType,字节[]有效负载)
{
byte[]mimeBytes=Encoding.UTF8.GetBytes(mimeType);
NdefRecord mimeRecord=新的NdefRecord(
NdefRecord.tnfmimedia,mimeBytes,新字节[0],有效载荷);
返回mimeRecord;
}
NDEFPUSHComplete上的公共无效(NfcEvent e)
{
Toast.MakeText(this.ApplicationContext,“messagesent”,ToastLength.Long).Show();
}
受保护的覆盖void OnResume()
{
base.OnResume();
if(NfcAdapter.ActionNdefDiscovered==Intent.Action)
{
过程意图(Intent);
}
}
受保护的覆盖无效Wintent(意图)
{
意图=意图;
}
无效处理意图(意图)
{
IParcelable[]rawMsgs=intent.GetParcelableArrayExtra(
NfcAdapter.ExtraNdefMessages);
NdefMessage msg=(NdefMessage)rawMsgs[0];
var textViewMsg=FindViewById(Resource.Id.textViewMsg);
textViewMsg.Text=Encoding.UTF8.GetString(msg.GetRecords()[0].GetPayload());
}

谢谢大家:)

OnNdefPushComplete
,整个Android Beam被弃用并从Android 10中删除

如果您想继续进行设备到设备的NFC,那么应该可以使用一部手机进行主机卡模拟(HCE),另一部使用
enableReaderMode


但谷歌建议使用蓝牙或Wifi Direct作为Android Beam更可靠的替代品。谷歌提供的一种替代方法是附近的安卓系统

你在哪个安卓版本(两款手机)上运行此功能?一款是安卓11,另一款是8Wow谢谢。这真的很有帮助。所以我需要两个应用程序来做这个?或者我可以在一个应用程序中使用它吗?:)它可以在一个应用程序中完成。嘿,抱歉打扰了。但是你知道关于HCE使用Xamarin的任何例子吗?我拥有的那台真的过时了,我无法让它工作。