Mqttを使用してサーバーからメッセージを受信するためにpaho androidサービスクライアントを使用しています。アクティビティが実行されているとき、アプリケーションは送信と受信の両方で正常に動作しますが、アプリケーションが実行されていないときに公開されたメッセージは受信されず、Callback クラスは実行されません。
コンテキストに問題がある可能性があり、Callback がアクティビティ コンテキストに関連付けられているか、何らかの方法でアプリケーションを起動して、メッセージをデータベースに書き込んでから再びスリープ状態にする必要があると思います。
これが私の MqttCallback の実装です。
public class Callback implements MqttCallback{
private Context context;
private static final String TAG = "MQTT";
public Callback(Context context) {
this.context = context;
}
@Override
public void connectionLost(Throwable arg0) {
MQTTClient.reconnect();
}
@Override
public void deliveryComplete(IMqttDeliveryToken arg0) {
}
@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
Log.i(TAG,"mesage arrived");
//update database and store message
}
私のクライアントのインスタンス化は次のとおりです。
client = newMqttAndroidClient(context,Constants.ADDRESS+Constants.PORT,
MqttAsyncClient.generateClientId());
client.setCallback(new Callback(context));
両方に送信されるコンテキストは、私の MainActivity (これ) のコンテキストです。
ガイダンスをいただければ幸いです。