AndroidStudio开发⼿机APP(⼆)-利⽤MQTT通信开发物联⽹程序Android Studio开发⼿机APP(⼆)-利⽤MQTT通信开发物联⽹程序
⼀、打开权限
开发物联⽹程序,最重要的当然联⽹了,所以我们要让APP可以连接⽹络,在
Android Studio中,就需要为我们的APP申请⽹络权限。如下,打开l ⽂件:
添加如下两⾏:
<!--允许程序打开⽹络套接字-->
<uses-permission name="android.permission.INTERNET"/>
<!--允许程序获取⽹络状态-->
<uses-permission name="android.permission.ACCESS_NETWORK_STATE"/>
添加后如下所⽰:
⼆、导⼊MQTT包
三、编写代码
准备⼯作做好了,我们就开始正式⼯作了,打开Java主程序:
⾸先,定义⼀些必要的变量(创建在MainActivity类⾥即可),其实就是连接MQTT服务端或者说代理端需要的⼀些信息:
private String serverUri ="tcp://127.0.0.1:1883";//这⾥可以填上各种云平台的物联⽹云平台的域名+1883端⼝号,什么阿⾥云腾讯云百度云天⼯物接⼊都可以,
// 这⾥我填的是我在我的阿⾥云服务器上搭建的EMQ平台的地址,
// 注意:前缀“tcp://”不可少,之前我没写,怎么都连不上,折腾了好久
private String userName ="android";//然后是你的⽤户名,阿⾥云腾讯云百度云天⼯物接⼊这些平台你新建设备后就⾃动⽣成了
private String passWord ="1234567";//⽤户名对应的密码,同样各种云平台都会对应⽣成密码,这⾥我的EMQ平台没做限制,所以⽤户名和密码可以随便填写
private String clientId ="app"+System.currentTimeMillis();//clientId很重要,不能重复,否则就会连不上,所以我定义成 app+当前时间
private String mqtt_sub_topic ="Android_Get";//需要订阅的主题
private String mqtt_pub_topic ="Android_Set";//需要发布的主题
然后我们封装⼀个简易的toast打印程序:
private void makeToast(String toast_str){
Toast.makeText(MainActivity.this, toast_str, Toast.LENGTH_LONG).show();
}
尝试打印⼀下我们⾃⼰创建得到的clientId:
makeToast("clientID:"+clientId);
整体代码如下:
实现效果如下:
我们创建⼀个mqtt客户端对象,
private MqttClient mqtt_client;//创建⼀个mqtt_client对象
然后我们编写⼀个mqtt_init_Connect();函数将mqtt_client实例化并启动连接:
public void mqtt_init_Connect()
{
try{
//实例化mqtt_client,填⼊我们定义的serverUri和clientId,然后MemoryPersistence设置clientid的保存形式,默认为以内存保存          mqtt_client =new MqttClient(serverUri,clientId,new MemoryPersistence());
//创建并实例化⼀个MQTT的连接参数对象
options =new MqttConnectOptions();
//然后设置对应的参数
options.setUserName(userName);//设置连接的⽤户名
options.CharArray());//设置连接的密码
options.setConnectionTimeout(30);// 设置超时时间,单位为秒
options.setKeepAliveInterval(50);//设置⼼跳,30s
options.setAutomaticReconnect(true);//是否重连
//设置是否清空session,设置为false表⽰服务器会保留客户端的连接记录,设置为true表⽰每次连接到服务器都以新的⾝份连接          options.setCleanSession(true);
//设置回调
mqtt_client.setCallback(new MqttCallback(){
@Override
public void connectionLost(Throwable cause){
//连接丢失后,⼀般在这⾥⾯进⾏重连
makeToast("connectionLost");
}
@Override
public void deliveryComplete(IMqttDeliveryToken token){
//publish后会执⾏到这⾥
}
@Override
public void messageArrived(String topicName, MqttMessage message)throws Exception {
//subscribe后得到的消息会执⾏到这⾥⾯
}
});
//连接mqtt服务器
t(options);
}catch(Exception e){
e.printStackTrace();
String());
}
}
然后我们在onCreate⽅法⾥调⽤,
然后我们安装运⾏APP,在我的EMQ后台已经可以看到APP已经连接了:
这⾥贴上Java主程序的代码:
ample.iot;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
eclipse开发手机appimport android.widget.Toast;
lipse.paho.client.mqttv3.IMqttDeliveryToken;
lipse.paho.client.mqttv3.MqttCallback;
lipse.paho.client.mqttv3.MqttClient;
lipse.paho.client.mqttv3.MqttConnectOptions;
lipse.paho.client.mqttv3.MqttException;
lipse.paho.client.mqttv3.MqttMessage;
lipse.paho.client.mqttv3.persist.MemoryPersistence;
import urrent.ScheduledExecutorService;
public class MainActivity extends AppCompatActivity {
private String serverUri ="tcp://127.0.0.1:1883";//这⾥可以填上各种云平台的物联⽹云平的域名+1883端⼝号,什么阿⾥云腾讯云百度云天⼯物接⼊都可以,
// 这⾥我填的是我在我的阿⾥云服务器上搭建的EMQ平台的地址,
// 注意:前缀“tcp://”不可少,之前我没写,怎么都连不上,折腾了好久
private String userName ="android";//然后是你的⽤户名,阿⾥云腾讯云百度云天⼯物接⼊这些平台你新建设备后就⾃动⽣成了
private String passWord ="1234567";//⽤户名对应的密码,同样各种云平台都会对应⽣成密码,这⾥我的EMQ平台没做限制,所以⽤户名和密码可以随便填写
private String clientId ="app"+System.currentTimeMillis();//clientId很重要,不能重复,否则就会连不上,所以我定义成 app+当前时间
private String mqtt_sub_topic ="Android_Get";//需要订阅的主题
private String mqtt_pub_topic ="Android_Set";//需要发布的主题
private MqttClient mqtt_client;//创建⼀个mqtt_client对象
MqttConnectOptions options;
private ScheduledExecutorService scheduler;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。