슬라이드 1 One M2M Application Android Sample User Guide Ver0 5

oneM2M-Application-AndroidSample_User_Guide_ver0_5

oneM2M-Application-AndroidSample_User_Guide_ver0_5

User Manual:

Open the PDF directly: View PDF PDF.
Page Count: 37

IoT Open Source, OCEAN
KETI (Korea Electronic Technology Institute)
(araha@keti.re.kr)
oneM2M Application AndroidSample UserGuide
IoT Open Source, OCEAN
Android Studio Installation
Android Studio download and installation
https://developer.android.com/sdk/index.html ( Android Studio Install …, Java Development Kit 7u79 Install )
IoT Open Source, OCEAN
Android Studio Installation
Android Studio download and installation
https://developer.android.com/sdk/index.html ( Android Studio Install )
IoT Open Source, OCEAN
Android Studio Installation
Android Studio download and installation
https://developer.android.com/sdk/index.html ( Android Studio Install )
IoT Open Source, OCEAN
Android Studio Installation
Execute Android Studio
-Click “Start a new Android Studio project”.
-Type the application name and company domain
IoT Open Source, OCEAN
Android Studio Installation
Configure ADK version and activity for targeting android devices
-Change Minimum SDK to API 23
-Select “Blank Activity”
IoT Open Source, OCEAN
Android Studio Installation
Customize the activity
-Input activity name and click “Finish” button.
-Right menu show the project file structure.
IoT Open Source, OCEAN
Android Studio Installation
Android Studio Virtual Devices
Click “AVD Manager” menu
1. The default virtual device is Nexus 5
2. [Add a new virtual device]
3. Click “Create Virtual Device”
4. Select a the phone type as VD
IoT Open Source, OCEAN
Android Studio Installation
Android Studio Virtual Devices
Android Virtual Device(AVD) Configuration
Select OS image
IoT Open Source, OCEAN
Android Studio Installation
Android Studio Virtual Devices
-Click start button to turn on the VD
IoT Open Source, OCEAN
Android Studio Installation
Android Studio Virtual Devices
-Wait for the VD system loading
IoT Open Source, OCEAN
Web View APP
Basic Default Code
activity_main.xml MainActivity.Java
AndroidManifest.xml
AndroidManifest?
Descript and configure the android project
App name, ID, icon, theme
App access right
Activity, Service, Intent
IoT Open Source, OCEAN
Mobius and APP connectivity
Import sample project
Android Project Import
* Download the sample source from IoT OCEAN (www.iotocean.org)
IoT Open Source, OCEAN
Mobius and APP connectivity
Import sample project
Android/app/manifest(AndroidMainifest.xml)
Android/app/res/layout/activity_main.xml(Design)
IoT Open Source, OCEAN
Mobius and APP connectivity
USB Debugging Mode on Android
Change device to debugging mode
Click “Build number” continue
IoT Open Source, OCEAN
Mobius and APP connectivity
App Running
Android Phone Device Debugging Mode Connect
IoT Open Source, OCEAN
Mobius and APP connectivity
App Running
Retrieve
CO2(MQTT)
Retrieve
CO2
Control LED Control LED Control LED
Control LED
IoT Open Source, OCEAN
App Code Review
Internet Permission Setting [ MQTT ]
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="keti.com.mobiusytsampleapp" >
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name="org.eclipse.paho.android.service.MqttService" />
</application>
</manifest>
IoT Open Source, OCEAN
App Code Review
Code Structure Review
IoT Open Source, OCEAN
App Code Review
Code Structure Review [ AE Create or AE Retrieve …]
<?xml version="1.0" encoding="utf-16" standalone="yes"?>
<m2m:ae xmlns:m2m="http://www.onem2m.org/xml/protocols"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
rn="ncubeapp">
<pi>/mobius-yt</pi>
<ty>2</ty>
<ct>20160928T161212</ct>
<ri>/mobius-yt/ncubeapp</ri>
<lt>20160928T161212</lt>
<api>0.2.481.2.0001.001.0001114</api>
<aei>xxxxxx</aei>
<rr>true</rr>
</m2m:ae>
Note: In oneM2M standard Android Application is mapping with Application Entity(AE). It should use the AE-ID as request “origin”
to do other resource operation(Create, Retrieve, Update, Delete).
IoT Open Source, OCEAN
App Code Review
Code Structure Review [ CO2 Retrieve, LED Control ]
<?xml version="1.0" encoding="utf-16" standalone="yes"?><m2m:cin
xmlns:m2m="http://www.onem2m.org/xml/protocols"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" rn="4-
20160925130205542urps"><pi>/mobius-yt/ae-edu0/cnt-
co2</pi><ty>4</ty><ct>20160925T130205</ct><ri>/mobius-yt/ae-edu0/cnt-co2/4-
20160925130205542urps</ri><lt>20160925T130205</lt><st>3756</st><mni>9007199
254740991</mni><cs>3</cs><con>719</con></m2m:cin>
<?xml version="1.0" encoding="utf-16" standalone="yes"?><m2m:cin
xmlns:m2m="http://www.onem2m.org/xml/protocols"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" rn="4-
20160925121654339wkyn"><pi>/mobius-yt/ae-edu0/cnt-
led</pi><ty>4</ty><ct>20160925T121654</ct><ri>/mobius-yt/ae-edu0/cnt-
led/4-
20160925121654339wkyn</ri><lt>20160925T121654</lt><st>18</st><mni>9007
199254740991</mni><cs>1</cs><cnf>text</cnf><con>4</con></m2m:cin>
IoT Open Source, OCEAN
App Code Review
Code Structure Review [ Subscription create for MQTT ]
<?xml version="1.0" encoding="utf-16" standalone="yes"?><m2m:sub
xmlns:m2m="http://www.onem2m.org/xml/protocols"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
rn="s201609251054113610oz3_rn"><pi>/mobius-yt/ae-edu0/cnt-
co2</pi><ty>23</ty><ct>20160925T133651</ct><ri>/mobius-yt/ae-edu0/cnt-
co2/s201609251054113610oz3_rn</ri><lt>20160925T133651</lt><st>0</st><enc
><net>3</net></enc><nu>mqtt://192.168.25.47/S201609251054113610oz3_sub</
nu><nct>2</nct><cr>S201609251054113610oz3</cr></m2m:sub>
IoT Open Source, OCEAN
App Code Review
Code Structure Review [ Button Click Event ]
case R.id.btnControl_Green: {
if (((ToggleButton) v).isChecked()) {
ControlRequest req = new ControlRequest("1");
req.setReceiver(new IReceived() {
@Override
public void getResponseBody(final String msg) {
handler.post(new Runnable() {
@Override
public void run() {
textViewData.setText("************** LED Green 제어(켜짐)..”);
}
});
}
});
req.start();
} else {
ControlRequest req = new ControlRequest("2");
req.setReceiver(new IReceived() {
@Override
public void getResponseBody(final String msg) {
handler.post(new Runnable() {
@Override
public void run() {
textViewData.setText("************** LED Green 제어(꺼짐)..”);
}
});
}
});
req.start();
}
break;
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnRetrieve: {
RetrieveRequest req = new RetrieveRequest();
textViewData.setText("");
req.setReceiver(new IReceived() {
@Override
public void getResponseBody(final String msg) {
handler.post(new Runnable() {
@Override
public void run() {
textViewData.setText("************** CO2 조회 ***;
}
});
}
});
req.start();
break;
}
..
.
IoT Open Source, OCEAN
App Code Review
Code Structure Review [Switch onCheckChanged Event]
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
if (isChecked) {
Log.d(TAG, "MQTT Create");
MQTT_Create(true);
} else {
Log.d(TAG, "MQTT Close");
MQTT_Create(false);
}
}
/* MQTT Subscription */
public void MQTT_Create(boolean mtqqStart) {
if (mtqqStart && mqttClient == null) {
/* Subscription Resource Create to Yellow Turtle */
SubscribeResource subcribeResource = new SubscribeResource();
subcribeResource.setReceiver(new IReceived() {
public void getResponseBody(final String msg) {
handler.post(new Runnable() {
public void run() { … }
});
}
});
subcribeResource.start();
/* MQTT Subscribe */
mqttClient = new MqttAndroidClient(this.getApplicationContext(), "tcp://" + csebase.getHost()
+ ":" + csebase.getMQTTPort(), MqttClient.generateClientId());
mqttClient.setCallback(mainMqttCallback);
try {
IMqttToken token = mqttClient.connect();
token.setActionCallback(mainIMqttActionListener);
} catch (MqttException e) {
e.printStackTrace();
}
} else {
/* MQTT unSubscribe or Client Close */
mqttClient.setCallback(null);
mqttClient.close();
mqttClient = null;
}
}
IoT Open Source, OCEAN
App Code Review
Retrieve by POSTMAN [ CO2 Sensing Data ]
IoT Open Source, OCEAN
App Code Review
Retrieve by Java Code [ CO2 Sensing Data ]
private String ServiceAEName = "ae-edu1";
public void GetAEInfo() {
csebase.setInfo("192.168.25.47","7579","mobius-yt","1883"); //Sample IP
}
/* Retrieve Co2 Sensor */
class RetrieveRequest extends Thread {
private final Logger LOG = Logger.getLogger(RetrieveRequest.class.getName());
private IReceived receiver;
private String ContainerName = "cnt-co2";
public RetrieveRequest(String containerName) {
this.ContainerName = containerName;
}
public RetrieveRequest() {}
public void setReceiver(IReceived hanlder) { this.receiver = hanlder; }
@Override
public void run() {
try {
String sb = csebase.getServiceUrl() + "/" + ServiceAEName + "/" + ContainerName + "/" + "latest";
URL mUrl = new URL(sb);
HttpURLConnection conn = (HttpURLConnection) mUrl.openConnection();
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.setDoOutput(false);
conn.setRequestProperty("Accept", "application/xml");
conn.setRequestProperty("X-M2M-RI", "12345");
conn.setRequestProperty("X-M2M-Origin", ae.getAEid() );
conn.setRequestProperty("nmtype", "long");
conn.connect();
String strResp = "";
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String strLine= "";
while ((strLine = in.readLine()) != null) {
strResp += strLine;
}
if ( strResp != "" ) {
receiver.getResponseBody(strResp);
}
conn.disconnect();
} catch (Exception exp) {
LOG.log(Level.WARNING, exp.getMessage());
}
}
}
IoT Open Source, OCEAN
App Code Review
Control by POSTMAN [ LED Control ]
1: Green LED ON
2: Green LED OFF
3: Blue LED ON
4: Blue LED OFF
IoT Open Source, OCEAN
@Override
public void run() {
try {
String sb = csebase.getServiceUrl() +"/" + ServiceAEName + "/" + container_name;
URL mUrl = new URL(sb);
HttpURLConnection conn = (HttpURLConnection) mUrl.openConnection();
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setInstanceFollowRedirects(false);
conn.setRequestProperty("Accept", "application/xml");
conn.setRequestProperty("Content-Type", "application/vnd.onem2m-res+xml;ty=4");
conn.setRequestProperty("locale", "ko");
conn.setRequestProperty("X-M2M-RI", "12345");
conn.setRequestProperty("X-M2M-Origin", ae.getAEid() );
String reqContent = contentinstance.makeXML();
conn.setRequestProperty("Content-Length", String.valueOf(reqContent.length()));
DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
dos.write(reqContent.getBytes());
dos.flush();
dos.close();
BufferedReader in = new BufferedReader(new
InputStreamReader(conn.getInputStream()));
String resp = "";
String strLine="";
while ((strLine = in.readLine()) != null) {
resp += strLine;
}
if (resp != "") {
receiver.getResponseBody(resp);
}
conn.disconnect();
} catch (Exception exp) {
LOG.log(Level.SEVERE, exp.getMessage());
}
}
}
App Code Review
Control by Java Code [ LED Control ]
private String ServiceAEName = "ae-edu1";
public void GetAEInfo() {
csebase.setInfo("192.168.25.47","7579","mobius-yt","1883");
}
class ControlRequest extends Thread {
private final Logger LOG = Logger.
getLogger
(ControlRequest.class.getName());
private IReceived receiver;
private String container_name = "cnt-led";
public ContentInstanceObject contentinstance;
public ControlRequest(String comm) {
contentinstance = new ContentInstanceObject();
contentinstance.setContent(comm);
}
public void setReceiver(IReceived hanlder) { this.receiver = hanlder; }
IoT Open Source, OCEAN
App Code Review
Content Instance Creation Java Code
public class ContentInstanceObject {
private String content = "";
public void setContent(String contentValue) {
this.content = contentValue;
}
public String makeXML() {
String xml = "";
xml += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
xml += "<m2m:cin ";
xml += "xmlns:m2m=\"http://www.onem2m.org/xml/protocols\" ";
xml += "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">";
xml += "<cnf>text</cnf>";
xml += "<con>" + content + "</con>";
xml += "</m2m:cin>";
return xml;
}
}
public String makeXML() {
String xml = "";
xml += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
xml += "<m2m:contentInstance ";
xml += "xmlns:m2m="http://www.onem2m.org/xml/protocols\" ";
xml += "xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance\">";
xml += "<contentInfo>text</contentInfo>";
xml += "<content>" + content + "</content>";
xml += "</m2m:contentInstance>";
return xml;
}
IoT Open Source, OCEAN
App Code Review
AE Create by POSTMAN
IoT Open Source, OCEAN
App Code Review
AE Create by Java Code
private String ServiceAEName = "ae-edu1";
public void GetAEInfo() {
csebase.setInfo("192.168.25.47","7579","mobius-yt","1883");
ae.setAppName("ncubeapp");
}
class aeCreateRequest extends Thread {
private final Logger LOG = Logger.
getLogger
(aeCreateRequest.class.getName());
String TAG = aeCreateRequest.class.getName();
private IReceived receiver;
int responseCode=0;
public ApplicationEntityObject applicationEntity;
public void setReceiver(IReceived hanlder) { this.receiver = hanlder; }
public aeCreateRequest(){
applicationEntity = new ApplicationEntityObject();
applicationEntity.setResourceName(ae.getappName());
}
public void run() {
try {
String sb = csebase.getServiceUrl();
URL mUrl = new URL(sb);
HttpURLConnection conn = (HttpURLConnection) mUrl.openConnection();
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setInstanceFollowRedirects(false);
conn.setRequestProperty("Content-Type", "application/vnd.onem2m-res+xml;ty=2");
conn.setRequestProperty("Accept", "application/xml");
conn.setRequestProperty("locale", "ko");
conn.setRequestProperty("X-M2M-Origin", "S");
conn.setRequestProperty("X-M2M-RI", "12345");
conn.setRequestProperty("X-M2M-NM", ae.getappName() );
String reqXml = applicationEntity.makeXML();
conn.setRequestProperty("Content-Length", String.valueOf(reqXml.length()));
DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
dos.write(reqXml.getBytes());
dos.flush();
dos.close();
responseCode = conn.getResponseCode();
BufferedReader in = null;
String aei = "";
if (responseCode == 201) {
// Get AEID from Response Data
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String resp = "";
String strLine;
while ((strLine = in.readLine()) != null) {
resp += strLine;
}
ParseElementXml pxml = new ParseElementXml();
aei = pxml.GetElementXml(resp, "aei");
ae.setAEid( aei );
Log.d(TAG, "Create Get AEID[" + aei + "]");
in.close();
}
if (responseCode != 0) {
receiver.getResponseBody( Integer.toString(responseCode) ); }
conn.disconnect();
} catch (Exception exp) {
LOG.log(Level.SEVERE, exp.getMessage());
}
<?xml version="1.0" encoding="UTF-8"?>
<m2m:ae
xmlns:m2m="http://www.onem2m.org/xml/protocols"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
rn="ncubeapp">
<api>0.2.481.2.0001.001.0001114</api>
<rr>true</rr>
</m2m:ae>
IoT Open Source, OCEAN
App Code Review
AE Retrieve POSTMAN [ AE-ID ]
IoT Open Source, OCEAN
App Code Review
AE Retrieve Java Code
private String ServiceAEName = "ae-edu1";
public void GetAEInfo() {
csebase.setInfo("192.168.25.47","7579","mobius-yt","1883");
ae.setAppName("ncubeapp");
}
/* Retrieve AE-ID */
class aeRetrieveRequest extends Thread {
private final Logger LOG = Logger.getLogger(aeCreateRequest.class.getName());
private IReceived receiver;
int responseCode=0;
public aeRetrieveRequest() {
}
public void setReceiver(IReceived hanlder) {
this.receiver = hanlder;
}
@Override
public void run() {
try {
String sb = csebase.getServiceUrl()+"/"+ ae.getappName();
URL mUrl = new URL(sb);
HttpURLConnection conn = (HttpURLConnection) mUrl.openConnection();
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.setDoOutput(false);
conn.setRequestProperty("Accept", "application/xml");
conn.setRequestProperty("X-M2M-RI", "12345");
conn.setRequestProperty("X-M2M-Origin", "Sandoroid");
conn.setRequestProperty("nmtype", "short");
conn.connect();
responseCode = conn.getResponseCode();
BufferedReader in = null;
String aei = "";
if (responseCode == 200) {
// Get AEID from Response Data
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String resp = "";
String strLine;
while ((strLine = in.readLine()) != null) {
resp += strLine;
}
ParseElementXml pxml = new ParseElementXml();
aei = pxml.GetElementXml(resp, "aei");
ae.setAEid( aei );
Log.d(TAG, "Retrieve Get AEID[" + aei + "]");
in.close();
}
if (responseCode != 0) {
receiver.getResponseBody( Integer.toString(responseCode) );
}
conn.disconnect();
} catch (Exception exp) {
LOG.log(Level.SEVERE, exp.getMessage());
}
}
IoT Open Source, OCEAN
App Code Review
Subscription Creation by POSTMAN
IoT Open Source, OCEAN
App Code Review
Subscription Creation by Java Code
private String ServiceAEName = "ae-edu1";
public void GetAEInfo() {
csebase.setInfo("192.168.25.47","7579","mobius-yt","1883");
ae.setAppName("ncubeapp");
}
/* MQTT Subscription */
public void MQTT_Create(boolean mtqqStart) {
if (mtqqStart && mqttClient == null) {
/* Subscription Resource Create to Yellow Turtle */
SubscribeResource subcribeResource = new SubscribeResource();
subcribeResource.setReceiver(new IReceived() {
public void getResponseBody(final String msg) {
handler.post(new Runnable() {
public void run() {
}
});
}
});
subcribeResource.start();
}
/* Subscribe Co2 Content Resource */
class SubscribeResource extends Thread {
private IReceived receiver;
private String container_name = "cnt-co2"; //change to control container name
public ContentSubscribeObject subscribeInstance;
public SubscribeResource() {
subscribeInstance = new ContentSubscribeObject();
subscribeInstance.setUrl(csebase.getHost());
subscribeInstance.setResourceName(ae.getAEid()+"_rn");
subscribeInstance.setPath(ae.getAEid()+"_sub");
subscribeInstance.setOrigin_id(ae.getAEid());
}
public void setReceiver(IReceived hanlder) { this.receiver = hanlder; }
private String ServiceAEName = "ae-edu1";
public void GetAEInfo() {
csebase.setInfo("192.168.25.47","7579","mobius-yt","1883");
ae.setAppName("ncubeapp");
}
/* MQTT Subscription */
public void MQTT_Create(boolean mtqqStart) {
if (mtqqStart && mqttClient == null) {
/* Subscription Resource Create to Yellow Turtle */
SubscribeResource subcribeResource = new SubscribeResource();
subcribeResource.setReceiver(new IReceived() {
public void getResponseBody(final String msg) {
handler.post(new Runnable() {
public void run() {
}
});
}
});
subcribeResource.start();
}
/* Subscribe Co2 Content Resource */
class SubscribeResource extends Thread {
private IReceived receiver;
private String container_name = "cnt-co2"; //change to control container name
public ContentSubscribeObject subscribeInstance;
public SubscribeResource() {
subscribeInstance = new ContentSubscribeObject();
subscribeInstance.setUrl(csebase.getHost());
subscribeInstance.setResourceName(ae.getAEid()+"_rn");
subscribeInstance.setPath(ae.getAEid()+"_sub");
subscribeInstance.setOrigin_id(ae.getAEid());
}
public void setReceiver(IReceived hanlder) { this.receiver = hanlder; }
IoT Open Source, OCEAN
App Code Review
MQTT Client Subscription, Listener, Callback, Response Java Code
private String ServiceAEName = "ae-edu1";
public void GetAEInfo() {
csebase.setInfo("192.168.25.47","7579","mobius-yt","1883");
ae.setAppName("ncubeapp");
MQTT_Req_Topic = "/oneM2M/req/:mobius-yt/"+ae.getAEid()+"_sub"+"/xml";
MQTT_Resp_Topic = "/oneM2M/resp/:mobius-yt/"+ae.getAEid()+"_sub"+"/xml";
}
/* MQTT Subscription */
public void MQTT_Create(boolean mtqqStart) {
if (mtqqStart && mqttClient == null) {
/* Subscription Resource Create to Yellow Turtle */
SubscribeResource subcribeResource = new SubscribeResource();
subcribeResource.setReceiver(new IReceived() {
subcribeResource.start();
/* MQTT Subscribe */
mqttClient = new MqttAndroidClient(this.getApplicationContext(), "tcp://" +
csebase.getHost() + ":" + csebase.getMQTTPort(), MqttClient.generateClientId());
mqttClient.setCallback(mainMqttCallback);
try {
IMqttToken token = mqttClient.connect();
token.setActionCallback(mainIMqttActionListener);
} catch (MqttException e) {
e.printStackTrace();
}
} else {
/* MQTT unSubscribe or Client Close */
mqttClient.setCallback(null);
mqttClient.close();
mqttClient = null;
}
}
/* MQTT Listener */
private IMqttActionListener mainIMqttActionListener = new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken asyncActionToken) {
String payload = "";
int mqttQos = 1; /* 0: NO QoS, 1: No Check , 2: Each Check */
MqttMessage message = new MqttMessage(payload.getBytes());
try {
mqttClient.subscribe(MQTT_Req_Topic, mqttQos);
} catch (MqttException e) {
e.printStackTrace();
}
}
};
/* MQTT Broker Message Received */
private MqttCallback mainMqttCallback = new MqttCallback() {
@Override
public void connectionLost(Throwable cause) { Log.d(TAG, "connectionLost"); }
@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
Log.d(TAG, "messageArrived");
textViewData.setText("");
textViewData.setText("**** MQTT CO2 실시간 조회 ****\r\n\r\n" +
message.toString().replaceAll("\t|\n", ""));
ArrayList<String> mqttMessage = new ArrayList<String>();
mqttMessage = MqttClientRequestParser.notificationParse(message.toString());
String responseMessage = MqttClientRequest.notificationResponse(mqttMessage);
/* Make xml for MQTT Response Message */
MqttMessage resmessage = new MqttMessage(responseMessage.getBytes());
try {
mqttClient.publish(MQTT_Resp_Topic, resmessage);
} catch (MqttException e) { e.printStackTrace(); }
}
@Override
public void deliveryComplete(IMqttDeliveryToken token) {
Log.d(TAG, "deliveryComplete");
}
};
IoT Open Source, OCEAN
App Code Review
Android Studio Generate APK
-Build -> Generate Signed APK...
-If have Key store, Select “Choose existing”
-If do not have Key store, Select “Create new”
-Save location and input file name, Password, Alias, Certification information.
-Select key file
-Locate the APK path.

Navigation menu