Я хочу работать с NFC (читай NFC-теги) в кроссплатформенном приложении
Я нашел пример для NFC для Xamarin. Android на форуме Xamarin. Пример работает, и я пытаюсь сделать это для кроссплатформенности, но встретил препятствия
(nfcAdapter = NfcAdapter.GetDefaultAdapter(this);
) NfcAdapter в этом случае = NULL, но в телефоне есть NFC (пример работает)
Я думаю, что проблема из-за содержания
я не могу получить свой контент ContentPage в Android для NfcAdapter, когда я перешел из ContentPage в класс Android для доступа к классам NFC на Android, я получаю контент как класс NFCWorker_Droid, у которого нет доступа к экрану
Я предполагаю, что мне нужно перенести информацию о ContentPage через интерфейс, но я не могу преобразовать Xamarin.ContentPage в Android.Content
С помощью интерфейса перехожу к классу, который есть в проекте android
В ContentPage
я вызываю метод интерфейса DependencyService.Get<INFCWorker>().EnableWriteMode();
и перехожу в класс в проект Android
Код ниже показывает код класса, который вызывается в Android
[assembly: Xamarin.Forms.Dependency(typeof(NFCWorker_Droid))]
namespace TestNavigationPage2.Droid
{
public class NFCWorker_Droid : Activity,INFCWorker
{
public const string ViewApeMimeType = "application/vnd.xamarin.nfcxample";
public static readonly string NfcAppRecord = "xamarin.nfxample";
public static readonly string Tag = "NfcXample";
private bool _inWriteMode;
private NfcAdapter _nfcAdapter;
public void EnableWriteMode()
{
_inWriteMode = true;
// Get a reference to the default NFC adapter for this device. This adapter
// is how an Android application will interact with the actual hardware.
_nfcAdapter = NfcAdapter.GetDefaultAdapter(this);
// Create an intent filter for when an NFC tag is discovered. When
// the NFC tag is discovered, Android will u
var tagDetected = new IntentFilter(NfcAdapter.ActionTagDiscovered);
var filters = new[] { tagDetected };
// When an NFC tag is detected, Android will use the PendingIntent to come back to this activity.
// The OnNewIntent method will invoked by Android.
//var intent = new Intent(this, GetType());
//var pendingIntent = PendingIntent.GetActivity(this, 0, intent, 0);
if (_nfcAdapter == null)
{
Page4.Instance.GlobalText = "NFC is not supported on this device.";
}
else
{
DisplayMessage("NFC is here!");
//_nfcAdapter.EnableForegroundDispatch(this, pendingIntent, filters, null);
}
}
}