嗨,Garmin 开发人员,
我一直在尝试在我的 Android 应用程序和我的 connectIQ 应用程序(在 Garmin Forerunner 230,SDK 版本 1.3.x 上)之间通过 BLE 开发直接消息通信设置。这里的目标是 Android 应用程序正在收集一些数据,然后将其推送到手表应用程序。
按照开发者网站上的详细信息,我已经设法让它工作,但是有很多丢失的消息没有被发送,并且手表接收的值比发送的值少。
在 Android 上,我在调试语句中得到此状态 (ConnectIQ.IQMessageStatus) = FAILURE_DURING_TRANSFER。“240”是正在发送的数据。
D/GarminMessenger:onMessageStatus:消息:240,设备:Forerunner 230,FAILURE_DURING_TRANSFER
这是我在 garmin 上的应用程序代码:
示例应用程序.mc
using Toybox.Application as App;
using Toybox.Communications as Comm;
using Toybox.WatchUi as Ui;
using Toybox.System as Sys;
var mailMethod;
var crashOnMessage = false;
var msg;
class SampleApp extends App.AppBase {
function initialize() {
AppBase.initialize();
Sys.println("app-initialize()");
msg = "0";
mailMethod = method(:onMail);
Comm.setMailboxListener(mailMethod);
Sys.println("app-initialize(): mail box listener has been set");
}
// onStart() is called on application start up
function onStart(state) {
System.println("app-onStart()");
}
// Return the initial view of your application here
function getInitialView() {
Sys.println("app-getInitialView()");
return [ new SampleAppView() ];
}
function onMail(mailIter) {
var mail = mailIter.next();
while(mail!=null) {
Sys.println("app-onMail: received - "+mail);
message = mail.toString();
Ui.requestUpdate();
mail = mailIter.next();
}
Comm.emptyMailbox();
}
// onStop() is called when your application is exiting
function onStop(state) {
System.println("app-onStop()");
}
}
class CommListener extends Comm.ConnectionListener {
function initialize() {
Comm.ConnectionListener.initialize();
sys.println("commlistener-initialize");
}
function onComplete() {
Sys.println("commlistener-onComplete: Transmit Complete");
}
function onError() {
Sys.println("commlistener-onError: Transmit Failed");
}
}
关于可能导致此问题的任何想法?我正在 Android 端执行所有必要的检查,以验证 Garmin 手表是否已配对和连接(并且应用程序已打开)。
发生这种情况的一个原因是我试图每秒发送 1-2 个数据值(每个都有一个 ConnectIQ.sendMessage()),所以 Garmin 设备/BLE 模块可能不支持该速率的通信?
提前感谢您的解决方案和建议。