Android 使用PebbleKit将布尔值发送到Pebble

Android 使用PebbleKit将布尔值发送到Pebble,android,c,pebble-watch,pebble-sdk,Android,C,Pebble Watch,Pebble Sdk,我从来没有真正做过太多的C语言,对于如何将一个布尔值从Android应用程序发送到Pebble Watch,我感到有点困惑 我的字符串工作正常,但在PebbleDictionary上似乎没有addBoolean方法。作为解决方法,我尝试使用addUint8发送1或0,但在处理卵石上的消息时遇到了问题 以下是我的Android代码: PebbleDictionary data = new PebbleDictionary(); if (isGPSFix()){ da

我从来没有真正做过太多的C语言,对于如何将一个布尔值从Android应用程序发送到Pebble Watch,我感到有点困惑

我的字符串工作正常,但在PebbleDictionary上似乎没有addBoolean方法。作为解决方法,我尝试使用addUint8发送1或0,但在处理卵石上的消息时遇到了问题

以下是我的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\u tuple\u 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时它不会振动。

据我所知,你必须向手表发送一本钥匙和物品的字典。在目标C中,它如下所示:

NSDictionary *update = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
键都是整数,我认为对象可以是布尔型的。在我的情况下,只有字符串工作得很好

在循环中,我在手表上执行如下操作:

t=dict_find(received,count);
strcpy(strs[count], dict_find(received,count)->value->cstring);

但是我必须告诉你,我还是一个新手。

Android方面的情况看起来不错。我认为这更像是一个AppSync问题

以下是要在watch应用程序中检查的一些事项:

确保创建了一个元组列表,其中包含监视中的初始值。此列表需要包含您的密钥GPS\u有\u固定\u密钥; 确保将这些元组传递给app_sync_init函数:
这两个步骤是app_sync工作所必需的cf。

多亏了sarfata上面接受的答案,我发现我没有将此新项添加到Pebble期望的元组中

一旦我添加了它,我的switch语句就开始工作了,我只需要将内存与工作进行比较。这是我记忆比较的工作代码,以防对任何人有所帮助

case GPS_HAS_FIX_KEY:
if (memcmp(s_data.haveGPS, new_tuple->value->data, 1) != 0){
  memcpy(s_data.haveGPS,new_tuple->value->data, 1);
  vibes_short_pulse();
}
break;

这真的很简单,只需要一个字节而不是8个字节——我认为这是在做一点比较,并在新值与旧值不同的情况下否定逻辑。

谢谢@sarfata。我在“初始值”元组中缺少条目。我还没有完全正确地使用memcmp,但是如果我只是在每次更新时通知,我至少现在会受到震动。我现在也有了正确的比较逻辑。请参阅下面我的答案,了解如何使用memcmp和memcpy命令。
app_sync_init(&sync, sync_buffer, sizeof(sync_buffer),
              initial_values, ARRAY_LENGTH(initial_values),
              sync_tuple_changed_callback, sync_error_callback, NULL);
case GPS_HAS_FIX_KEY:
if (memcmp(s_data.haveGPS, new_tuple->value->data, 1) != 0){
  memcpy(s_data.haveGPS,new_tuple->value->data, 1);
  vibes_short_pulse();
}
break;