Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/poz1/NFCForms


https://github.com/poz1/NFCForms

Last synced: 30 days ago
JSON representation

Awesome Lists containing this project

README

        

# NFCForms

Easily read and write NFC tags in your Xamarin.Forms application. XNFCForms is an example app that you can download to see how it works.

##Installation

Install from Nuget NFCForms ( http://www.nuget.org/packages/NFCForms/ )

###Android
1: Add the NFC capability in the manifest.
2: In MainActivity.cs add

```
public NfcAdapter NFCdevice;
public NfcForms x;
```

3: In the OnCreate method, before LoadApplication(), add

```
NfcManager NfcManager = (NfcManager)Android.App.Application.Context.GetSystemService(Context.NfcService);
NFCdevice = NfcManager.DefaultAdapter;

Xamarin.Forms.DependencyService.Register();
x = Xamarin.Forms.DependencyService.Get() as NfcForms;
```

4: after OnCreate() add

```
protected override void OnResume ()
{
base.OnResume ();
if (NFCdevice != null) {
var intent = new Intent (this, GetType ()).AddFlags (ActivityFlags.SingleTop);
NFCdevice.EnableForegroundDispatch
(
this,
PendingIntent.GetActivity (this, 0, intent, 0),
new[] { new IntentFilter (NfcAdapter.ActionTechDiscovered) },
new String[][] {new string[] {
NFCTechs.Ndef,
},
new string[] {
NFCTechs.MifareClassic,
},
}
);
}
}

protected override void OnPause ()
{
base.OnPause ();
NFCdevice.DisableForegroundDispatch (this);
}

protected override void OnNewIntent (Intent intent)
{
base.OnNewIntent (intent);
x.OnNewIntent(this, intent);
}
```

Here we are asking Android to notify us when an NFC tag is available. We can choose wich kind of tags we want to be notified setting the parameeter
of the IntentFilter. In this case we will receive tags supporting NDEF or MifareClassic. More info here ( http://developer.android.com/guide/topics/connectivity/nfc/nfc.html ).

5: If we want our app to be lauched when a compatible tag is scanned add

```
[Activity (Label = "NFCForms.Droid", Icon = "@drawable/icon", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
[IntentFilter (new[]{NfcAdapter.ActionTechDiscovered})]
[MetaData (NfcAdapter.ActionTechDiscovered, Resource="@xml/nfc")]
```

and an XML file where you set the kind of NFC tag you want to open your app (there is one in the example in Resources/xml/nfc.xml).
This code is the equivalent of adding these lines

```

...

...

```

in the manifest file. Again, more info here ( http://developer.android.com/guide/topics/connectivity/nfc/nfc.html )

###Windows Phone

1: Add NFC capability to the manifest

2: In MainPage.xaml.cs add

```
public NfcForms x;
```
3: before LoadApplication() add
```
Xamarin.Forms.DependencyService.Register();
x = Xamarin.Forms.DependencyService.Get() as NfcForms;
```

On WindowsPhone only NDEF tags are supported so there is no need to specify technologies.

##Usage
###Read Tag
We call the DependecyService to get the NFC Reader and we register to the NewTag event:
```
INfcForms device = DependencyService.Get();
device.NewTag += HandleNewTag;
```
then when a compatible tag is scanned the event is fired and we receive an NfcFormsTag.
In NfcFormsTag.NdefMessage we have the NDEF message. Using NDEF Library ( http://github.com/mopius/ndef-nfc ) we can read the content.

###Write Tag
we use
```
device.WriteTag(msg);
```
where msg is an NDEFMessage that, again, you can create using NDEF Library.
Please note that this method is assuming the tag to be in place when it is called.

##Credits

Written by Alessandro Pozone - www.POZ1.com thanks to the guys behind NDEF Library, without their project this would have been much more limited.