NFC в кроссплатформенное приложение, интеграция Xamarin.Android - PullRequest
0 голосов
/ 16 мая 2018

Я хочу работать с 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);
            }
        }
}
...