Scan devices¶
You can scan for Bluetooth Low Energy (BLE)
(BLEScanner), Wi-Fi
(WifiScanner) or NFC
(NFCScanner) capable Taps. Each scanner implements the IDeviceScanner class.
If you need a ready-to-use Tap picker, your can either use the ScanActivity or ScanDeviceFragment class. See UI Components page for how to use it.
Depending on the smartphone that the device application is running on, NFC, BLE or Wi-Fi may not be available. Use function IDeviceScanner to check if the scanner is available.
Do not forget to request permission!
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();
}
}