Manage your devices¶
To manage your devices and related communication, you have multiple implemententation choices.
If you have a single process application, the easiest solution is to use DeviceManager class. See below for usage.
What to use ? | Inter Process Communication | Multithreading in service |
---|---|---|
DeviceManager | NO | NO |
IBinder | NO | YES |
Messenger | YES | NO |
AIDL | YES | YES |
Single process application¶
You can use the DeviceManager class.
This class can store IoTizeDevice instances across your application and pass it through activities.
Initialize¶
To make it accessible across your application, you can create a global instance in your Android Application
class.
public class MyApplication extends Application {
/**
* Global instance of the DeviceManager
*/
private static DeviceManager deviceManager;
@Override
public void onCreate() {
super.onCreate();
// Instantiate in onCreate
deviceManager = DeviceManager.getDefaultInstance();
}
@Override
public void onTerminate() {
// Do not forget to clear to terminate pending device connections.
deviceManager.clear();
super.onTerminate();
}
/**
* Getter for the global instance of DeviceManager
*/
public static DeviceManager getDeviceManager() {
return deviceManager;
}
}
If you need multiple device managers, use method DeviceManager manager = DeviceManager.newInstance()
.
Otherwise use DeviceManager.getDefaultInstance()
.
Usage¶
Each device is stored with a unique identifier that can be used to retrieve it. By default the identifier (or tag) is the serial number of the device, which is unique.
Add a device¶
IoTizeDevice device = ...;
// With default identifier
MyApplication.getDeviceManager().create(device);
// With custom identifier
MyApplication.getDeviceManager().create(device, "<device-identifier>");
Retrieve device¶
IoTizeDevice device = MyApplication.getDeviceManager().get("<device-identifier");
Pass it through activity or a fragment¶
You can use Bundle
class to pass the device identifier and get it back in the target activity.
Here an example:
// First class
class Activity1 extends Activiy {
public openOtherActivity (){
IoTizeDevice device = ...;
// Make sure it is registered in DeviceManager
if (!MyApplication.getDeviceManager().has(device.getTag())){
throw new IllegalStateException("You register the device before");
}
Intent intent = new Intent(this, Activity2.class);
intent.putExtra("DEVICE_IDENTIFIER", device.getTag());
startActivity(intent);
}
}
// In your activity
class Activity2 extends Activiy {
@Override
public void onCreate(){
String deviceIdentifier = null;
Intent intent = getIntent();
if (intent != null){
deviceIdentifier = integer.getStringExtra("DEVICE_IDENTIFIER", null);
}
if (deviceIdentifier == null) {
throw new IllegalStateException("Device identifier should be passed to this activity");
}
IoTizeDevice device = MyApplication.getDeviceManager().get(deviceIdentifier);
// OK
}
}
Inter-process communication or multi-threading¶
This is not available in the API yet.
Refer to Android guide and more particulary on these subjects: