使用的Android Studio版本为3.0.1,没办法,升级到3.2.1后弄不出来了,又下了个3.0的绿色版,反正自己用又不考虑用户感受啥的,能实现我想要的功能能在我手机上跑就OK。
首先是APP下build.grdle文件:

apply plugin: 'com.android.application'android {    compileSdkVersion 25    buildToolsVersion '26.0.2'    defaultConfig {        applicationId "com.example.administrator.kongzhiqi"        minSdkVersion 10        targetSdkVersion 25        versionCode 1        versionName "1.0"        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }}dependencies {    compile fileTree(include: ['*.jar'], dir: 'libs')    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {        exclude group: 'com.android.support', module: 'support-annotations'    })    compile 'com.android.support:appcompat-v7:25.3.1'    compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha8'    compile 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'    compile 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.1'    compile 'io.reactivex:rxjava:1.1.0'    compile 'io.reactivex:rxandroid:1.1.0'    compile 'com.orhanobut:logger:2.1.1'    compile group: 'com.google.code.gson', name: 'gson', version: '2.8.5'    testCompile 'junit:junit:4.12'}

然后是项目下的build.grdle文件

buildscript {    repositories {        jcenter()        maven {            url "https://repo.eclipse.org/content/repositories/paho-releases/"        }    }    dependencies {        classpath 'com.android.tools.build:gradle:3.0.1'        // NOTE: Do not place your application dependencies here; they belong        // in the individual module build.gradle files    }}allprojects {    repositories {        jcenter()    }}task clean(type: Delete) {    delete rootProject.buildDir}

最后在AndroidManifest.xml中加入权限:

    <uses-permission android:name="android.permission.WAKE_LOCK" />    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />    <uses-permission android:name="android.permission.READ_PHONE_STATE" />    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.INTERNET" />

注册服务(呢吗,在3.2版本中死活注册不了):

        <service android:name="org.eclipse.paho.android.service.MqttService" />

接下来就可以写逻辑代码了,先定义mqtt要用到的配置参数

    private String topic = "订阅主题";    private String user = "用户名";    private String pass = "密码";    private String host = "mqtt服务器地址,tcp://xxx:1883";    private String clientId = "发送消息的ID";    private String clientId1 = "接收消息的ID,不要与发送ID一样";    private int qos = 0; //消息等级

建立MQTT连接发送消息

                //消息缓存方式,内存缓存                MemoryPersistence persistence = new MemoryPersistence ();                 try {                    //建立客户端                    MqttClient sampleClient = new MqttClient (broke,clientId,persistence);                    //连接的配置参数                    MqttConnectOptions connectOptions = new MqttConnectOptions ();                    connectOptions.setCleanSession (true);  //不记忆上次会话                    connectOptions.setUserName (user); //用户名                    connectOptions.setPassword (pass.toCharArray ()); //密码                    connectOptions.setConnectionTimeout(30);  //超时时间                    connectOptions.setKeepAliveInterval(60); //心跳时间,单位秒                    connectOptions.setAutomaticReconnect(true);//自动重连                    System.out.println ("connecting to broker" );                    //连接服务器                    sampleClient.connect (connectOptions);                    //用Gson框架建立要发送的json字符串                    esp8266 a1 = new esp8266("0001", "01", "qidong");                   Gson gson = new Gson();                   String json = gson.toJson(a1);                    //创建消息                    MqttMessage message = new MqttMessage (json.getBytes ());                    //设定消息发送等级                    message1.setQos (qos);                    //发布消息                    sampleClient.publish (topic,message);                    //断开连接                    sampleClient.disconnect ();                   // System.exit (0);//关闭UI进程                } catch (MqttException e) {                    e.printStackTrace ();                }

MQTT接受消息

         //消息缓存方式,内存缓存          MemoryPersistence persistence = new MemoryPersistence ();         //clientId1 参数不能与发信端一样         MqttAndroidClient androidClient = new MqttAndroidClient(getApplicationContext(), host, clientId1, persistence);          //连接的配置参数          MqttConnectOptions options = new MqttConnectOptions();        options.setAutomaticReconnect(true);        options.setCleanSession(true);        options.setUserName(user);        options.setPassword(pass.toCharArray());        options.setConnectionTimeout(30);        options.setKeepAliveInterval(60);        try {            //这个代码启动后一直运行            androidClient.connect(options);        } catch (MqttException e) {            e.printStackTrace();        }        androidClient.setCallback(new MqttCallbackExtended() {            @Override            public void connectComplete(boolean reconnect, String serverURI) {                //连接成功                subscribeToTopic();            }            @Override            public void connectionLost(Throwable cause) {                 //连接中断            }            @Override            public void messageArrived(String topic, MqttMessage message) throws Exception {               //消息到达                startNotification(message);            }            @Override            public void deliveryComplete(IMqttDeliveryToken token) {                 //接收完成            }        });    }    private void subscribeToTopic() {        try {            androidClient.subscribe("topic", qos, null, new IMqttActionListener() {                @Override                public void onSuccess(IMqttToken asyncActionToken) {                    //成功收到消息                }                @Override                public void onFailure(IMqttToken asyncActionToken, Throwable exception) {                       //接收消息失败                }            });        } catch (MqttException e) {            e.printStackTrace();        }    }     private void startNotification(MqttMessage message) {        //收到的信息        String info = message.toString();        //把json字符串转为java对象        Gson gson = new Gson();        esp8266_shou a2 = gson.fromJson(info, esp8266_shou.class);       //这里就写收到信息的业务逻辑    }

这个代码能在8.0系统上跑,写了个控制8266的APP,先就这样把,等双11买的继电器模块和oled屏到了在折腾下,其实,本来是打算集成一下百度的语音控制的,那代码有的看不懂,代码又多,暂时打退堂鼓了,等闲得无聊的时候在试试。先把弄了的写在这里记着,方便以后自己查找。再次说明,偶是菜鸟,偶是菜鸟,偶是菜鸟!!!

更多相关文章

  1. [置顶] Android WebKit消息处理(二)Touch事件的分发处理
  2. Android消息队列(三)--多线程与消息处理
  3. android菜鸟学习笔记8----Activity(一)
  4. android app 缓存路径
  5. Android知识梳理:消息机制之Handler
  6. android菜鸟日记2 contentProvider
  7. Android 消息机制 Handler (Java&Native)

随机推荐

  1. android 相对布局中的 控件布局
  2. android 中的几种目录
  3. Android 4.0 对通知栏图标的尺寸有要求
  4. Android中webview跟JAVASCRIPT中的交互
  5. 取消默认Listview点击的显示的颜色
  6. Android获取经纬度
  7. Android编译系统学习总结
  8. Unity3d 与 Android之间的互相调用
  9. android振动效果的实现
  10. AndroidManifest 中android:exported