积极答复者
关于android app使用azure IoT Hub的问题

问题
-
从官网下载的android sample demo有build成功(https://github.com/Azure/azure-iot-sdk-java/tree/95f8f4e80b3ec8b6fbbbc8e577e70d00c01e7a64/device/samples),使用 DeviceExplorer进行测试发现android app是可以发送和接受消息。
这种情况看起来是android设备和PC利用IoT Hub进行通讯。我想使用两个android app 利用IoT Hub进行通讯。用android sample build的APP发送,另一个接受,这样可以做到么?
答案
-
Hi,
正如您所说的, Azure IoT Hub 常规的设备间通讯就是通过服务器的 D2C 及 C2D 来实现消息转发的。
此处使用的服务器用于消息的处理,以及指定转发的设备,据我所知,该服务器是需要开发者自己提供的。
MSDN 社区技术支持
如果该回复解决了您的问题,请及时点击“标记为答案”选项,如未解决请选择“取消标记为答案”,这会有利于其他人员来阅读您的帖子。如果您对MSDN 技术支持有任何的建议或意见,请随时联系 MSDNFSF@microsoft.com。- 已标记为答案 BobbLiu 2017年3月3日 8:19
全部回复
-
Hi BobbLiu,
Azure IoT Hub 提供可靠的 设备到云 以及 云到设备的消息传送,所以您的关于两台Android设备通过 IoT Hub 完成消息传送的需求是可以通过以下 3 步完成:
- 第一台 Android 设备向 IoT Hub 发送消息;
- IoT Hub 接收消息并同时将所接收的消息发送给第二台 Android 设备;
- 第二台 Android 设备接收消息
参考文档:
- Azure IoT 中心入门 (Java) - 提供 设备到云 的消息传送示例
- 使用 IoT 中心发送云到设备的消息 (Java) - 提供 云到设备 的消息传送示例
- Azure IoT 设备示例(Java) - Android 设备示例
MSDN 社区技术支持
如果该回复解决了您的问题,请及时点击“标记为答案”选项,如未解决请选择“取消标记为答案”,这会有利于其他人员来阅读您的帖子。如果您对MSDN 技术支持有任何的建议或意见,请随时联系 MSDNFSF@microsoft.com。 -
第一台android设备向IoT Hub发送消息:
public void SendMessage() throws URISyntaxException, IOException { // Comment/uncomment from lines below to use HTTPS or MQTT protocol // IotHubClientProtocol protocol = IotHubClientProtocol.HTTPS; IotHubClientProtocol protocol = IotHubClientProtocol.MQTT; DeviceClient client = new DeviceClient(connString, protocol); try { client.open(); } catch (IOException e1) { output("Exception while opening IoTHub connection: " + e1.toString()); } catch (Exception e2) { output("Exception while opening IoTHub connection: " + e2.toString()); } for (int i = 0; i < 5; ++i) { String msgStr = "Event Message " + Integer.toString(i); try { Message msg = new Message(msgStr); msg.setProperty("messageCount", Integer.toString(i)); output(msgStr); EventCallback eventCallback = new EventCallback(); client.sendEventAsync(msg, eventCallback, i); } catch (Exception e) { output("sendEventAsync exception: " + e.toString()); } try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } client.close(); }
接收来自于IoT Hub的消息:
private void receiveMessage() throws URISyntaxException, IOException { // Comment/uncomment from lines below to use HTTPS or MQTT protocol // IotHubClientProtocol protocol = IotHubClientProtocol.HTTPS; IotHubClientProtocol protocol = IotHubClientProtocol.MQTT; DeviceClient client = new DeviceClient(connString, protocol); if (protocol == IotHubClientProtocol.MQTT) { MessageCallbackMqtt callback = new MessageCallbackMqtt(); Counter counter = new Counter(0); client.setMessageCallback(callback, counter); } else { MessageCallback callback = new MessageCallback(); Counter counter = new Counter(0); client.setMessageCallback(callback, counter); } try { client.open(); output("Receive message open success"); } catch (IOException e1) { output("Exception while opening IoTHub connection: " + e1.toString()); } catch (Exception e2) { output("Exception while opening IoTHub connection: " + e2.toString()); } try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } client.close(); output("Receive message close success"); }
请问一下,IoT Hub 接收消息并同时将所接收的消息发送给第二台 Android 设备这个该怎么实现?
android project中无法使用com.microsoft.azure.iothub-java-client:iothub-java-service-client library, 如果使用这个library会报下面的错误信息:
Error:Lambda coming from jar file need their interfaces on the classpath to be compiled, unknown interfaces are java.lang.Runnable
谢谢!
- 已编辑 BobbLiu 2017年3月2日 7:51 添加错误信息
-
Hi BobbLiu,
> 请问一下,IoT Hub 接收消息并同时将所接收的消息发送给第二台 Android 设备这个该怎么实现?
根据官网提供的2个示例即可实现该功能:
- Azure IoT 中心入门 (Java) - 接收设备到云的消息
- 使用 IoT 中心发送云到设备的消息 (Java) - 发送云到设备的消息
将 示例1 中接收到的消息,做为 示例2 的发送消息即可。(PC 端实现)
>android project中无法使用com.microsoft.azure.iothub-java-client:iothub-java-service-client library, 如果使用这个library会报下面的错误信息: Error:Lambda coming from jar file need their interfaces on the classpath to be compiled, unknown interfaces are java.lang.Runnable
Service SDK 是服务器端使用的,Android 端并没有该 SDK。
参考文档 : Microsoft Azure IoT SDKs for Java
MSDN 社区技术支持
如果该回复解决了您的问题,请及时点击“标记为答案”选项,如未解决请选择“取消标记为答案”,这会有利于其他人员来阅读您的帖子。如果您对MSDN 技术支持有任何的建议或意见,请随时联系 MSDNFSF@microsoft.com。- 已编辑 David TangMicrosoft contingent staff, Moderator 2017年3月2日 10:08 Remove Typo
-
Hi,
正如您所说的, Azure IoT Hub 常规的设备间通讯就是通过服务器的 D2C 及 C2D 来实现消息转发的。
此处使用的服务器用于消息的处理,以及指定转发的设备,据我所知,该服务器是需要开发者自己提供的。
MSDN 社区技术支持
如果该回复解决了您的问题,请及时点击“标记为答案”选项,如未解决请选择“取消标记为答案”,这会有利于其他人员来阅读您的帖子。如果您对MSDN 技术支持有任何的建议或意见,请随时联系 MSDNFSF@microsoft.com。- 已标记为答案 BobbLiu 2017年3月3日 8:19
-
Hi,BobbLiu
可以实现。
第二个 Android 设备作为“云端”使用(不过这样不是物联网的应用场景了),具体实现方式是第二个Android设备用 Event Hub 读取 IoT Hub 中的 D2C 消息,即第一个 Android 设备发出来的消息。
Java 的 Event Hub SDK 可以从 https://github.com/Azure/azure-event-hubs-java 找到,连接 Event Hub 使用的 Connection String 就是你的 IoT Hub 中具有读取 D2C 消息权限的 Connection String,比如 iothubowner 或者 service。如果创建 Event Hub 客户端时需要 Event Hub Path,这个 Path 是 messages/events/
- 已编辑 SneezryMicrosoft employee 2017年3月24日 8:51
- 已建议为答案 SneezryMicrosoft employee 2017年3月24日 8:51