我想将消息从
android服务发布到本地服务器.这是我的代码的一部分,最简单的形式基于
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; }
I/MQTT﹕ Client connection Failed: cannot start service org.eclipse.paho.android.service.MqttService
显然由库返回,因为’listener!= null’,Line 410.使用调试器,它显示’listener = SensorLoggerService $1 @ 3634′. SensorLoggerService是我的服务.
什么可能出错?非常感谢.
解决方法
对我来说同样的问题,在我的情况下问题是< 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权限,否则您将无法连接.
HTH