1

私は実際にはあまりCをやったことがなく、AndroidアプリからPebble Watchにブール値を送信する最良の方法に少し困惑しています.

文字列は正常に動作していますが、PebbleDictionary に addBoolean メソッドがないようです。回避策として、addUint8 を使用して 1 または 0 を送信しようとしていますが、Pebble でのメッセージの処理に問題があります。

ここに私のAndroidコードがあります:

    PebbleDictionary data = new PebbleDictionary();
    if (isGPSFix()){
        data.addUint8(GPS_HAS_FIX_KEY, Byte.valueOf("1"));
    } else {
        data.addUint8(GPS_HAS_FIX_KEY, Byte.valueOf("0"));
    }
    PebbleKit.sendDataToPebble(app.getContext(), UUID, data);

そして、私のペブルにはデータ構造があります:

static struct MyData {
  uint8_t haveGPS[1];
  .... // other stuff ommitted
  AppSync sync;
  uint8_t sync_buffer[256];
} s_data;

そして、sync_tuple_changed コールバックでこのように比較しようとしています。

static void sync_tuple_changed_callback(const uint32_t key, const Tuple* new_tuple, const Tuple* old_tuple, void* context) {
(void) old_tuple;

   switch (key) {
     case GPS_HAS_FIX_KEY:
       if (memcmp(s_data.haveGPS, new_tuple->value->data, 8) == 0){
         memcpy(s_data.haveGPS,new_tuple->value->data, new_tuple->length);
         vibes_short_pulse();
       }
     break;
     default:
       return;
   }
 }

時計がクラッシュすることはありません。携帯電話が落下したり、GPS を取得したりしたときに振動することはありません。

4

3 に答える 3

0

Android 側では問題がないように見えます。これは AppSync の問題だと思います。

ウォッチ アプリケーションで確認する必要がある点は次のとおりです。

  • ウォッチで初期値を持つタプルのリストを必ず作成してください。このリストにはキーが含まれている必要がありますGPS_HAS_FIX_KEY
Tuplet initial_values[] = {
  TupletInteger(GPS_HAS_FIX_KEY, (uint8_t) 0),
  /* Other tuplets that you will synchronize */
}; 
  • これらの連符をapp_sync_init()関数に渡すようにしてください。
app_sync_init(&sync, sync_buffer, sizeof(sync_buffer),
              initial_values, ARRAY_LENGTH(initial_values),
              sync_tuple_changed_callback, sync_error_callback, NULL);

これらの 2 つの手順は、app_sync が機能するために必要です ( AppSync リファレンス ドキュメントを参照)。

于 2013-06-21T13:02:33.107 に答える