如何通过 Xamarin.Android 使用 NFC 发送消息?
How do you send message using NFC with Xamarin.Android?
我正在开发应用程序来演示 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());
}
谢谢大家:)
OnNdefPushComplete
并且整个 Android Beam 已弃用并从 Android 10
中删除
https://developer.android.com/reference/android/nfc/NfcAdapter.OnNdefPushCompleteCallback
如果你想继续进行设备到设备 NFC,那么应该可以使用一个 phone 进行主机卡仿真 (HCE),另一个使用 enableReaderMode
但是 Google 建议使用蓝牙或 Wifi Direct 作为 Android Beam 的更可靠替代品。 Google 提供的替换方法之一是 Android Nearby https://developers.google.com/nearby
我正在开发应用程序来演示 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());
}
谢谢大家:)
OnNdefPushComplete
并且整个 Android Beam 已弃用并从 Android 10
https://developer.android.com/reference/android/nfc/NfcAdapter.OnNdefPushCompleteCallback
如果你想继续进行设备到设备 NFC,那么应该可以使用一个 phone 进行主机卡仿真 (HCE),另一个使用 enableReaderMode
但是 Google 建议使用蓝牙或 Wifi Direct 作为 Android Beam 的更可靠替代品。 Google 提供的替换方法之一是 Android Nearby https://developers.google.com/nearby