我試圖使用發佈AWSIotMqttManager與IOT上的Android應用Amazon Web Services的一個MQTT消息,我都跟着用this例如爲基地,以我的代碼。該應用程序表示,它可以成功連接到設備,但無法真正發佈消息,這裏有什麼問題?使用的Android要發佈的消息MQTT AWS上的物聯網服務
// Initialize the AWS Cognito credentials provider
credentialsProvider = new CognitoCachingCredentialsProvider(
getApplicationContext(), // context
COGNITO_POOL_ID, // Identity Pool ID
MY_REGION // Region
);
Region region = Region.getRegion(MY_REGION);
//intialize unnqique clientid as client to iot aws
Long tsLong = System.currentTimeMillis()/1000;
clientId = tsLong.toString();
// MQTT Client
mqttManager = new AWSIotMqttManager(clientId, CUSTOMER_SPECIFIC_ENDPOINT);
// The following block uses a Cognito credentials provider for authentication with AWS IoT.
new Thread(new Runnable() {
@Override
public void run() {
awsCredentials = credentialsProvider.getCredentials();
runOnUiThread(new Runnable() {
@Override
public void run() {
bttnConnect.setEnabled(true);
Toast.makeText(WelcomePageActivity.this, "credentials ok?", Toast.LENGTH_SHORT).show();
}
});
}
}).start();
//connection button onclick lisetner will connect to the mqtt protocol
bttnConnect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("LOG_TAG", "clientId = " + clientId);
try {
mqttManager.connect(credentialsProvider, new AWSIotMqttClientStatusCallback() {
@Override
public void onStatusChanged(final AWSIotMqttClientStatus status,
final Throwable throwable) {
Log.d("LOG_TAG", "Status = " + String.valueOf(status));
runOnUiThread(new Runnable() {
@Override
public void run() {
if (status == AWSIotMqttClientStatus.Connecting) {
tvStatus.setText("Connecting...");
} else if (status == AWSIotMqttClientStatus.Connected) {
tvStatus.setText("Connected");
} else if (status == AWSIotMqttClientStatus.Reconnecting) {
if (throwable != null) {
Log.e("LOG_TAG", "Connection error.", throwable);
}
tvStatus.setText("Reconnecting");
} else if (status == AWSIotMqttClientStatus.ConnectionLost) {
if (throwable != null) {
Log.e("LOG_TAG", "Connection error.", throwable);
throwable.printStackTrace();
}
tvStatus.setText("Disconnected");
} else {
tvStatus.setText("Disconnected");
}
}
});
}
});
} catch (final Exception e) {
Log.e("LOG_TAG", "Connection error.", e);
tvStatus.setText("Error! " + e.getMessage());
}
}
});
//publisj button
ledbutton.setOnClickListener(new View.OnClickListener() {
final String topic = "$aws/things/industech/shadow/update";
final String msg = "{\"state\": {\"desired\": {\"ledBarStatus\": 1},\"reported\": {\"temperature\": 25,\"ledBarStatus\":1}}}";
@Override
public void onClick(View v) {
try {
mqttManager.publishString(msg, topic, AWSIotMqttQos.QOS1);
} catch (Exception e) {
Log.e("LOG_TAG", "Publish error.", e);
}
}
});
日誌:
/CognitoCachingCredentialsProvider: Loading credentials from SharedPreferences
D/CognitoCachingCredentialsProvider: Saving credentials to SharedPreferences
D/LOG_TAG: clientId = 1489081527
D/LOG_TAG: Status = Connecting
D/LOG_TAG: Status = Connected
D/LOG_TAG: Status = Reconnecting
D/LOG_TAG: Status = Connected
您能解決這個問題嗎?我昨天自己偶然發現了這個問題。它有時會說「已連接」,不會繼續前進,有時會繼續記錄「重新連接」。 – RamithDR