What you'll need when using this library :
Android | ver |
---|---|
API | >=16 |
In order to get a quick demo running you could perform the following steps :
- Add this to the repositories block :
repositories {
maven{
url "http://maven.appfoundry.be"
}
}
- Go to your project's
build.gradle
file, and change the dependencies block to match the following line of code there :
compile 'be.appfoundry:nfc-lib:1.1'
Now go to the created activity, and either
- Implement FGD yourself
public class MyActivity{
private PendingIntent pendingIntent;
private IntentFilter[] mIntentFilters;
private String[][] mTechLists;
private NfcAdapter mNfcAdapter;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
mIntentFilters = new IntentFilter[]{new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED)};
mTechLists = new String[][]{new String[]{Ndef.class.getName()},
new String[]{NdefFormatable.class.getName()}};
}
public void onResume(){
super.onResume();
if (mNfcAdapter != null) {
mNfcAdapter.enableForegroundDispatch(this, pendingIntent, mIntentFilters, mTechLists);
}
}
public void onPause(){
super.onPause();
if (mNfcAdapter != null)
{
mNfcAdapter.disableForegroundDispatch(this);
}
}
}
- Or extend from NfcActivity:
public class MyActivity extends NfcActivity{
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
- In both cases, add the following to your AndroidManifest.xml file :
<uses-permission android:name="android.permission.NFC" />
- Paste this in the activity if you're extending our class :
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
for (String message : getNfcMessages()){
Toast.makeText(this,message,Toast.LENGTH_SHORT).show();
}
}
- Otherwise :
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
SparseArray<String> res = new NfcReadUtilityImpl().readFromTagWithSparseArray(intent);
for (int i =0; i < res.size() ; i++ ) {
Toast.makeText(this, res.valueAt(i), Toast.LENGTH_SHORT).show();
}
}
- If you like the Map implementation more you might as well use :
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
for (String message : new NfcReadUtilityImpl().readFromTagWithMap(intent).values()) {
Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
}
}
- Now you're able to read the NFC Tags as long as the library supports the data in it when held to your phone!
- Let your activity implement
AsyncUiCallback
:
@Override
public void callbackWithReturnValue(Boolean result) {
String message = result ? "Success" : "Failed!";
Toast.makeText(this,message,Toast.LENGTH_SHORT).show();
}
@Override
public void onProgressUpdate(Boolean... booleans) {
Toast.makeText(this, booleans[0] ? "We started writing" : "We could not write!",Toast.LENGTH_SHORT).show();
}
@Override
public void onError(Exception e) {
Toast.makeText(this,e.getMessage(),Toast.LENGTH_SHORT).show();
}
- Create a field with an
AsyncOperationCallback
in the following way :
AsyncOperationCallback mAsyncOperationCallback = new AsyncOperationCallback() {
@Override
public boolean performWrite(NfcWriteUtility writeUtility) throws ReadOnlyTagException, InsufficientCapacityException, TagNotPresentException, FormatException {
return writeUtility.writeEmailToTagFromIntent("[email protected]","Subject","Message",getIntent());
}
};
- Override the
onNewIntent(Intent)
method in the following way :
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
new WriteEmailNfcAsync(this,mAsyncOperationCallback).executeWriteOperation();
}
- If you hold a tag against the phone and it is NFC Enabled, your implementation of the methods will be executed.
-
When extending our class, all you have to do in order to enable Android Beam is call the
enableBeam()
method.- This enables Android Beam
- Provides a default implementation with a standard text
-
If you did not opt for extending, take a look at the official docs, or the source code.