我想将消息从android service发布到本地服务器。以下是基于来自here的代码片段的最简单形式的部分代码。
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。使用调试器,它显示'listener = SensorLoggerService$1@3634‘。SensorLoggerService是我的服务。
你知道会出什么问题吗?非常感谢。
发布于 2015-11-25 08:46:57
我也遇到了同样的问题;在我的例子中,问题是<service>标记在<application>标记之外。
在一开始,我有这样的想法:
<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和WAKE_LOCK权限。
HTH
发布于 2018-07-11 08:04:36
MqttService需要此权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />https://stackoverflow.com/questions/32413643
复制相似问题