【发布时间】:2017-08-01 00:31:00
【问题描述】:
我正在尝试在 Android 应用程序上使用 AWSIotMqttManager 和亚马逊网络服务 IoT 发布一条 mqtt 消息,我遵循使用 this 示例作为我的代码的基础。该应用程序说它可以成功连接到设备,但无法真正发布消息,这是什么问题?
// 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
【问题讨论】:
-
你能解决这个问题吗?我昨天自己偶然发现了这个问题。有时会显示“已连接”,但不会继续前进,有时会继续记录“正在重新连接”。
-
你能解决这个问题吗?我正在尝试 n 甚至没有连接
-
@SweetyBertilla 抱歉,我一直无法为该应用找出这个 MQTT / AWS 部分。
-
@S.Q 我已经弄明白了,如果您还需要帮助,请告诉我
标签: java android amazon-web-services mqtt aws-iot