Todos los productos
Search
Centro de documentos

IoT Platform:Conexión a IoT Platform desde Android mediante Paho MQTT

Última actualización: Sep 04, 2026

Utilice Paho Android Service para conectar una aplicación Android a IoT Platform y enviar o recibir mensajes.

Requisitos previos

En la consola de IoT Platform , para la instancia correspondiente, cree un producto y un dispositivo, y obtenga el nombre de dominio de acceso MQTT y la información del certificado del dispositivo (ProductKey, DeviceName y DeviceSecret). Para obtener más información, consulte:

Descripción general

Paho Android Service es un servicio cliente MQTT basado en la biblioteca Eclipse Paho MQTT para Java.

Entorno de desarrollo

Este ejemplo utiliza Android Studio 3.5.1 con Gradle 3.5.1.

Descargue Android Studio desde el sitio web oficial de Android Studio.

Instalación del cliente Paho Android

  1. Cree un nuevo proyecto de Android.

    Importante

    El valor de

    targetSdkVersion

    en el archivo

    build.gradle

    de la aplicación debe ser 30 o inferior. Si es mayor, debe modificarlo.

  2. Agregue la dependencia de Paho Android Client 1.1.1 a sus archivos de Gradle:

    • En el archivo build.gradle del proyecto, agregue la URL del repositorio de versiones de Paho.

      repositories {
          maven {
              url "https://repo.eclipse.org/content/repositories/paho-releases/"
          }
      }
    • En el archivo build.gradle de la aplicación, agregue las dependencias de Paho Android Service (1.1.1) y del cliente MQTT (1.1.0).

      dependencies {
          implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'
          implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
      }
  3. Agregue las siguientes entradas a AndroidManifest.xml:

    • Declare el servicio MQTT:

      <!-- Mqtt Service -->
      <service android:name="org.eclipse.paho.android.service.MqttService">
      </service>
    • Agregue los permisos obligatorios.

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

Conexión a IoT Platform

  1. Descargue android_sample_code.zip y extraiga el archivo AiotMqttOption.java, que calcula los parámetros de conexión MQTT.

    El archivo AiotMqttOption.java define la clase AiotMqttOption:

    • Prototipo:

      class AiotMqttOption
    • Función:

      Calcula los valores de username, password y clientID necesarios para conectar un dispositivo a IoT Platform mediante MQTT.

    • Miembros:

      Definición de tipo

      Descripción del método

      public AiotMqttOption

      getMqttOption(String productKey, String deviceName, String deviceSecret)

      Calcula los valores MQTT de username, password y clientid a partir de los valores productKey, deviceName y deviceSecret del dispositivo.

      public String

      getUsername()

      Obtiene el valor MQTT de username.

      public String

      getPassword()

      Obtiene el valor MQTT de password.

      public String

      getClientid()

      Obtiene el valor MQTT de clientid.

  2. Importe AiotMqttOption.java a su proyecto de Android.

  3. Agregue código para conectar el dispositivo a IoT Platform.

    Llame a la clase AiotMqttOption en AiotMqttOption.java para calcular los parámetros de conexión MQTT y conectarse a IoT Platform.

    Instrucciones de desarrollo y código de ejemplo:

    • Calcule los parámetros de conexión MQTT clientId, username y password, y establezca username y password en el objeto MqttConnectOptions.

      final private String PRODUCTKEY = "a11xsrW****";
      final private String DEVICENAME = "paho_android";
      final private String DEVICESECRET = "tLMT9QWD36U2SArglGqcHCDK9rK9****";
      
      /* Obtain the MQTT connection information: clientId, username, and password. */
      AiotMqttOption aiotMqttOption = new AiotMqttOption().getMqttOption(PRODUCTKEY, DEVICENAME, DEVICESECRET);
      if (aiotMqttOption == null) {
          Log.e(TAG, "device info error");
      } else {
          clientId = aiotMqttOption.getClientId();
          userName = aiotMqttOption.getUsername();
          passWord = aiotMqttOption.getPassword();
      }
      
      /* Create an MqttConnectOptions object and configure the username and password. */
      MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
      mqttConnectOptions.setUserName(userName);
      mqttConnectOptions.setPassword(passWord.toCharArray());
    • Conéctese a IoT Platform.

      Cree un objeto MqttAndroidClient, configure la devolución de llamada y llame a connect con MqttConnectOptions.

      /* Create an MqttAndroidClient object and set the callback. */
      mqttAndroidClient = new MqttAndroidClient(getApplicationContext(), host, clientId);
      mqttAndroidClient.setCallback(new MqttCallback() {
          @Override
          public void connectionLost(Throwable cause) {
              Log.i(TAG, "connection lost");
          }
      
          @Override
          public void messageArrived(String topic, MqttMessage message) throws Exception {
              Log.i(TAG, "topic: " + topic + ", msg: " + new String(message.getPayload()));
          }
      
          @Override
          public void deliveryComplete(IMqttDeliveryToken token) {
              Log.i(TAG, "msg delivered");
          }
      });
      
      /* Establish an MQTT connection. */
      try {
          mqttAndroidClient.connect(mqttConnectOptions, null, new IMqttActionListener() {
              @Override
              public void onSuccess(IMqttToken asyncActionToken) {
                  Log.i(TAG, "connect succeed");
      
                  subscribeTopic(SUB_TOPIC);
              }
      
              @Override
              public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                  Log.i(TAG, "connect failed");
              }
          });
      
      } catch (MqttException e) {
          e.printStackTrace();
      }
    • Publique un mensaje. Llame a publish para enviar una carga útil al tema /${productKey}/${deviceName}/user/update.

      public void publishMessage(String payload) {
          try {
              if (mqttAndroidClient.isConnected() == false) {
                  mqttAndroidClient.connect();
              }
      
              MqttMessage message = new MqttMessage();
              message.setPayload(payload.getBytes());
              message.setQos(0);
              mqttAndroidClient.publish(PUB_TOPIC, message,null, new IMqttActionListener() {
                  @Override
                  public void onSuccess(IMqttToken asyncActionToken) {
                      Log.i(TAG, "publish succeed!");
                  }
      
                  @Override
                  public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                      Log.i(TAG, "publish failed!");
                  }
              });
          } catch (MqttException e) {
              Log.e(TAG, e.toString());
              e.printStackTrace();
          }
      }

      What is a topic?

    • Llame a subscribe para suscribirse a un tema y recibir mensajes de IoT Platform.

      public void subscribeTopic(String topic) {
          try {
              mqttAndroidClient.subscribe(topic, 0, null, new IMqttActionListener() {
                  @Override
                  public void onSuccess(IMqttToken asyncActionToken) {
                      Log.i(TAG, "subscribed succeed");
                  }
      
                  @Override
                  public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                      Log.i(TAG, "subscribed failed");
                  }
              });
      
          } catch (MqttException e) {
              e.printStackTrace();
          }
      }

    Consulte los patrones de comunicación entre dispositivo y nube en Overview of communications among devices, IoT platform, and servers.

  4. Compile el proyecto.

Ejecución de la demostración

Ejecute la aplicación de demostración para comprobar la conexión a IoT Platform.

  1. Descargue el paquete de código de demostración y extráigalo.

  2. Importe aiot-android-demo a Android Studio.

  3. En el archivo MainActivity ubicado en app/src/main/java/com.linkkit.aiot_android_demo, reemplace la información del dispositivo de marcador de posición con las credenciales de su dispositivo.

    • Establezca PRODUCTKEY, DEVICENAME y DEVICESECRET con los valores del certificado de su dispositivo.

    • Configure el host con su endpoint: final String host = "tcp://" + PRODUCTKEY + ".iot-as-mqtt.cn-shanghai.aliyuncs.com:443";

      • Para instancias públicas nuevas e instancias Enterprise, configure el host con el endpoint de su instancia: final String host = "tcp://" + "{your-instance-endpoint}".

        Inicie sesión en la consola de IoT Platform. En la página Instance Overview, haga clic en su instancia. En la página Instance Details, haga clic en View Development Configuration para obtener el endpoint. View and configure instance endpoints.

      • Para instancias públicas anteriores:

        Reemplace el código de región (cn-shanghai) por la región donde se encuentra su dispositivo. Supported regions.

  4. Compile y ejecute la aplicación.

    Tras una ejecución exitosa, revise los registros en Logcat.

    2019-12-04 19:44:01.824 5952-5987/com.linkkit.aiot_android_demo W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
    2019-12-04 19:44:01.829 5952-5987/com.linkkit.aiot_android_demo D/EGL_emulation: eglCreateContext: 0xec073240: maj 3 min 0 rcv 3
    2019-12-04 19:44:01.830 5952-5987/com.linkkit.aiot_android_demo D/EGL_emulation: eglMakeCurrent: 0xec073240: ver 3 0 (tinfo 0xec09b470)
    2019-12-04 19:44:01.852 5952-5987/com.linkkit.aiot_android_demo W/Gralloc3: mapper 3.x is not supported
    2019-12-04 19:44:01.854 5952-5987/com.linkkit.aiot_android_demo D/HostConnection: createUnique: call
    ...
    ...
    2019-12-04 19:44:01.860 5952-5987/com.linkkit.aiot_android_demo D/eglCodecCommon: allocate: Ask for block of size 0x1000
    2019-12-04 19:44:01.861 5952-5987/com.linkkit.aiot_android_demo D/eglCodecCommon: allocate: ioctl allocate returned offset 0x3ff706000 size 0x2000
    2019-12-04 19:44:01.897 5952-5987/com.linkkit.aiot_android_demo D/EGL_emulation: eglMakeCurrent: 0xec073240: ver 3 0 (tinfo 0xec09b470)
    2019-12-04 19:44:02.245 5952-6023/com.linkkit.aiot_android_demo D/AlarmPingSender: Register alarmreceiver to MqttServiceMqttService.pingSender.a11xsrW****.paho_android|timestamp=1575459841629,_v=sdk-android-1.0.0,securemode=2,signmethod=hmacsha256|
    2019-12-04 19:44:02.256 5952-6023/com.linkkit.aiot_android_demo D/AlarmPingSender: Schedule next alarm at 1575459902256
    2019-12-04 19:44:02.256 5952-6023/com.linkkit.aiot_android_demo D/AlarmPingSender: Alarm scheule using setExactAndAllowWhileIdle, next: 60000
    2019-12-04 19:44:02.272 5952-5952/com.linkkit.aiot_android_demo I/AiotMqtt: connect succeed
    2019-12-04 19:44:02.301 5952-5952/com.linkkit.aiot_android_demo I/AiotMqtt: subscribed succeed

    Inicie sesión en la consola de IoT Platform para consultar el estado del dispositivo y los registros en su instancia.

    • En el panel de navegación izquierdo, elija Device Management > Devices. Podrá observar que el estado del dispositivo es Online.

    • Elija Monitoring & O&M > Log Service. Puede consultar los IoT Platform logs y los on-premises device logs. Para obtener más información, consulte IoT Platform logs y On-premises device logs.

Códigos de error

Si el dispositivo no logra conectarse a IoT Platform mediante MQTT, utilice los códigos de error para solucionar el problema. Para obtener más información sobre los códigos de error del lado del servidor, consulte Troubleshooting.