一切都很好地获取手表信息但是当我将数据iOS应用程序转移到观看应用程序时,我收到错误一段时间我的日志说消息发送成功。发送消息,我的卵石手表没有收到任何数据。我的鹅卵石手表里的空窗口。
我正在使用cloud pebble for pebble watch app和iOS version 8.3,xcode 6.3.1
c code:
#include <pebble.h>
static TextLayer *hello_text_layer;
static void message_received(DictionaryIterator *iterator, void *context) {
char *message = dict_find(iterator, 0)->value->cstring;
text_layer_set_text(hello_text_layer,message);
text_layer_set_font(hello_text_layer, fonts_get_system_font(FONT_KEY_ROBOTO_BOLD_SUBSET_49));
}
int main(void) {
app_message_register_inbox_received(message_received);
app_message_open(app_message_inbox_size_maximum(), 0);
Window *first_window = window_create();
hello_text_layer = text_layer_create(GRect(10, 10, 124, 148));
text_layer_set_text(hello_text_layer, "Welcome");
layer_add_child(window_get_root_layer(first_window), text_layer_get_layer(hello_text_layer));
window_stack_push(first_window, true);
app_event_loop();
text_layer_destroy(hello_text_layer);
window_destroy(first_window);
}
iOS代码:
- (void)viewDidLoad {
[super viewDidLoad];
AppDelegate *delegate = [[UIApplication sharedApplication] delegate];
self.watch = [delegate getConnectedWatch];
// Check the watch object is available
if(self.watch) {
NSLog(@"i think got its work");
[self.watch getVersionInfo:^(PBWatch *watch, PBVersionInfo *versionInfo ) {
NSLog(@"Pebble name: %@", [watch name]);
NSLog(@"Pebble serial number: %@", [watch serialNumber]);
NSLog(@"Pebble firmware os version: %li", (long)versionInfo.runningFirmwareMetadata.version.os);
NSLog(@"Pebble firmware major version: %li", (long)versionInfo.runningFirmwareMetadata.version.major);
NSLog(@"Pebble firmware minor version: %li", (long)versionInfo.runningFirmwareMetadata.version.minor);
NSLog(@"Pebble firmware suffix version: %@", versionInfo.runningFirmwareMetadata.version.suffix);
} onTimeout:^(PBWatch *watch) {
NSLog(@"Timed out trying to get version info from Pebble.");
}];
[self.watch appMessagesGetIsSupported:^(PBWatch *watch, BOOL isAppMessagesSupported) {
if(isAppMessagesSupported) {
// Tell the user using the Label
NSLog(@"can send data to watch");
} else {
NSLog(@"cannot send data to watch");
}
}];
}
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)send:(id)sender {
[self.watch appMessagesLaunch:^(PBWatch *watch, NSError *error) {
if (!error) {
NSLog(@"Successfully launched app.");
}
else {
NSLog(@"Error launching app - Error: %@", error);
}
}
];
// Register to receive events
[[PBPebbleCentral defaultCentral] setDelegate:self];
// Set UUID
uuid_t myAppUUIDbytes;
NSUUID *myAppUUID = [[NSUUID alloc] initWithUUIDString:@"37cec7a8-8195-4b9f-9a1b-696b7e05ba1b"];
[myAppUUID getUUIDBytes:myAppUUIDbytes];
[[PBPebbleCentral defaultCentral] setAppUUID:[NSData dataWithBytes:myAppUUIDbytes length:16]];
NSDictionary *message = @{@(0):@"optisol",
};
NSLog(@"%@",message);
[self.watch appMessagesPushUpdate:message onSent:^(PBWatch *watch, NSDictionary *update, NSError *error) {
NSLog(@"getting called");
if (!error) {
NSLog(@"Message sent!!!!!!!!");
}
else
{
NSLog(@"Message not sent!!!!!!!!\n\n%@",error.localizedDescription);
}
}];
[self.watch appMessagesAddReceiveUpdateHandler:^BOOL(PBWatch *watch, NSDictionary *update) {
// Process incoming messages
if([update objectForKey:[NSNumber numberWithInt:0]]) {
// Up button was pressed!
NSLog(@"value received form pebble");
}
return YES;
}];
}
有一段时间我也收到了这个错误:
Error launching app - Error: Error Domain=com.pebble.iossdk.public Code=10 "The watch did not acknowledge the pushed update in time." UserInfo=0x166b9120 {NSLocalizedDescription=The watch did not acknowledge the pushed update in time.}
答案 0 :(得分:2)
最后我发现了我的问题的解决方案.. Here 解释得很好。
我已将我的c代码更改为喜欢这个
APP_LOG(APP_LOG_LEVEL_INFO, "Message received!");
Tuple *t = dict_read_first(iterator);
while (t != NULL) {
// Long lived buffer
static char s_buffer[64];
APP_LOG(APP_LOG_LEVEL_INFO, "Message ready to get!");
snprintf(s_buffer, sizeof(s_buffer), "'%s'", t->value->cstring);
text_layer_set_text(hello_text_layer, s_buffer);
// Get next pair, if any
t = dict_read_next(iterator);
}
工作正常..