Scan devices¶
You can scan for Bluetooth Low Energy (BLE)
(BLEScanner), Wi-Fi
(WifiScanner) or NFC
(NFCScanner) capable Tap Devices. Each scanner implements IDeviceScanner class.
If you need a ready to use Tap Device picker, your can either use the ScanActivity or ScanDeviceFragment classes. See UI Components page for how to use it.
Depending on the smartphone device application is running on NFC, BLE or Wi-Fi may not be availalbe. Use function IDeviceScanner to check wether the scanner is available.
Besides do not forget to request permissions!
Wi-Fi Scanner¶
class YourActivity extends Activity { @Nullable WifiScanner scanner; @Override public void onCreate(){ scanner = new WifiScanner(context); scanner.setOnDeviceDiscoveredCallback(new IOnDeviceDiscovered<ScanResult>() { @Override public void onDeviceDiscovered(ScanResult scanResult) { // You could instantiate a device from this info // IoTizeDevice device = IoTizeDevice.fromProtocol(new WIFIProtocol(scanResult)); } }); } @Override public void onResume(){ scanner.start(); } @Override public void onPause(){ scanner.stop(); } }
Bluetooth Low Energy Scanner¶
class YourActivity extends Activity { @Nullable BluetoothScanner scanner; @Override public void onCreate(){ scanner = new BluetoothScanner(context); scanner.setOnDeviceDiscoveredCallback(new IOnDeviceDiscovered<BluetoothDevice>() { @Override public void onDeviceDiscovered(BluetoothDevice device) { // You could instantiate a device from this info // IoTizeDevice device = IoTizeDevice.fromProtocol(BLEProtocol.fromDevice(YourActivity.this, device)); } }); } @Override public void onResume(){ scanner.start(); } @Override public void onPause(){ scanner.stop(); } }
NFC Scanner¶
To enable NFC
you need to edit your Manifest
file:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.iotize.android.exampleapp"> <!-- Add permission --> <uses-permission android:name="android.permission.NFC" /> <!-- Add intent filter --> <activity android:name=".MyActivity"> <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <!-- <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="application/com.iotize.android.communicationapp" /> --> </intent-filter> <intent-filter> <action android:name="android.nfc.action.TAG_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </manifest>
Then in your activity, create an NFCScanner
instance.
class MyActivity extends Activity { @Nullable NFCScanner scanner; @Override public void onCreate(){ scanner = new NFCScanner(context); scanner.setOnDeviceDiscoveredCallback(new IOnDeviceDiscovered<Intent>() { @Override public void onDeviceDiscovered(Intent intent) { Log.d(TAG, "NFC device discovered"); NFCIntentParser nfcIntentParser = new NFCIntentParser(intent); Tag nfcTag = nfcIntentParser.getTag(); // You could instantiate a device from this info // IoTizeDevice device = IoTizeDevice.fromProtocol(NFCProtocol.fromTag(nfcTag)); } }); } /** * IMPORTANT */ @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); Log.d(TAG, "New intent: " + intent); String action = intent.getAction(); if (action != null && (action.equals(NfcAdapter.ACTION_TAG_DISCOVERED) || action.equals(NfcAdapter.ACTION_NDEF_DISCOVERED) || action.equals(NfcAdapter.ACTION_TAG_DISCOVERED))) { mNFCScanner.onNewIntent(intent); } } @Override public void onResume(){ scanner.start(); } @Override public void onPause(){ scanner.stop(); } }