Paho MqttAndroidClient.connect 总是失败

2023-12-30

我想从 Android 发布消息service到本地服务器。这是我的代码的一部分,以最简单的形式基于片段here https://stackoverflow.com/questions/24791118/android-paho-mqtt-service-for-publishing.

MemoryPersistence memPer;
MqttAndroidClient client;

@Override
public IBinder onBind(Intent intent) {
    memPer = new MemoryPersistence();
    client = new MqttAndroidClient(this, "tcp://192.168.1.42:1883", "clientid", memPer);

    try {
        client.connect(null, new IMqttActionListener() {

            @Override
            public void onSuccess(IMqttToken mqttToken) {
                Log.i("MQTT", "Client connected");
                Log.i("MQTT", "Topics=" + mqttToken.getTopics());

                MqttMessage message = new MqttMessage("Hello, I am Android Mqtt Client.".getBytes());
                message.setQos(2);
                message.setRetained(false);

                try {
                    client.publish("messages", message);

                    Log.i("MQTT", "Message published");

                    client.disconnect();
                    Log.i("MQTT", "client disconnected");
                } catch (MqttPersistenceException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (MqttException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }


            }

            @Override
            public void onFailure(IMqttToken arg0, Throwable arg1) {
                // TODO Auto-generated method stub
                Log.i("MQTT", "Client connection failed: " + arg1.getMessage());
            }
        });
    } catch (MqttException e) {
        e.printStackTrace();
    }

    return mBinder;
}

但 onFailure 函数总是被调用,我收到错误:

I/MQTT﹕ Client connection failed: cannot start service org.eclipse.paho.android.service.MqttService

显然是由库返回的,因为“listener!= null”,Line 410 http://git.eclipse.org/c/paho/org.eclipse.paho.mqtt.java.git/tree/org.eclipse.paho.android.service/org.eclipse.paho.android.service/src/org/eclipse/paho/android/service/MqttAndroidClient.java。使用调试器,它显示“listener = SensorLoggerService$1@3634”。 SensorLoggerService 是我的服务。

知道可能出了什么问题吗?多谢。


对我来说同样的问题;就我而言,问题是<service>标签位于<application> tag.

一开始我有这个:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mycompany.myapp" >
...
<service android:name="org.eclipse.paho.android.service.MqttService">
    </service>
...
<application
    android:name="com.mycompany.myapp" ... >
...
</application>

然后我改成这样:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mycompany.myapp" >
...
<application
    android:name="com.mycompany.myapp" ... >
...
    <service android:name="org.eclipse.paho.android.service.MqttService">
    </service>

</application>

一切顺利!

您还需要添加INTERNET, ACCESS_NETWORK_STATE and WAKE_LOCK权限。

HTH

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Paho MqttAndroidClient.connect 总是失败 的相关文章

随机推荐