3

Garmin 開発者の皆さん、こんにちは。

Android アプリと connectIQ アプリ (Garmin Forerunner 230、SDK バージョン 1.3.x) の間で、BLE を介したダイレクト メッセージング通信のセットアップを開発しようとしています。ここでの目標は、Android アプリがデータを収集し、それを watch アプリにプッシュすることです。

開発者サイトの詳細に従って、これを機能させることができましたが、送信されないドロップメッセージが多数あり、時計は送信されているものよりも少ない値を受け取ります.

Android では、デバッグ ステートメントでこのステータス (ConnectIQ.IQMessageStatus) = FAILURE_DURING_TRANSFER を取得します。「240」は送信中のデータです。

D/GarminMessenger: onMessageStatus: メッセージ: 240、デバイス: Forerunner 230、FAILURE_DURING_TRANSFER

これはガーミンの私のアプリコードです:

SampleApp.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 つは、毎秒 1 ~ 2 個のデータ値 (それぞれに ConnectIQ.sendMessage() を使用) を送信しようとしているためです。おそらく、Garmin デバイス/BLE モジュールはそのレートでの通信をサポートしていませんか?

解決策と提案を前もって感謝します。

4

2 に答える 2