Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
146 views
in Technique[技术] by (71.8m points)

ios - determine if watch is bluetooth paired, wifi, or needs to use cellular objective c Xcode

I have an app with an appleWatch extension. I an passing data from the app to the watch using bluetooth and by CloudKit. I am trying to find how to determine if the watch is paired using bluetooth so I can send the data that way or if it is on wifi or cellular to get data over CloudKit. I have imported WatchKit and CloudKit and watch connectivity. But I can't seem to find the code in objective c to make the determination so I can use get the data from the correct source.

Here is some of my code with inserted if statement (not correct but example of what I want to do.

- (void)awakeWithContext:(id)context {
    [super awakeWithContext:context];
  

    if ([WCSession isSupported]) {

        WCSession *session = [WCSession defaultSession];

        session.delegate = self;

        [session activateSession];
        
        NSLog(@"THISIS CALLED");
    }
    // Configure interface objects here.
}
-(void)session:(WCSession *)session didReceiveApplicationContext:(NSDictionary<NSString *, id> *)applicationContext {
    NSLog(@"THIS IS BEING CALLED4");
    
   
    
    if (session==paired)
        //do this
   if (applicationContext != nil) {
       NSString *myPoolString = @"MyPoolInfo";
       CKRecordID *recordID = [[CKRecordID alloc]initWithRecordName:myPoolString];
       [[CKContainer defaultContainer].privateCloudDatabase fetchRecordWithID:recordID
                        completionHandler:^(CKRecord *record, NSError *error) {
           record = [[CKRecord alloc] initWithRecordType: @"MyPoolInfo"];
           NSString *trial = [record valueForKey:@"temperature"];
           NSLog(@"trial:%@",trial);
       }];
       NSString *dataReceivedfromiPhone = [NSString stringWithFormat:@"BatteryValue: %@, TempValue: %@,DateValue: %@,LevelValue:%@,TripValue:%@",[applicationContext objectForKey:@"battery"], [applicationContext objectForKey:@"temp"], [applicationContext objectForKey:@"date"], [applicationContext objectForKey:@"level"], [applicationContext objectForKey:@"trip"]];
       NSString *BatteryString = [applicationContext objectForKey:@"battery"];
       NSString *Batall = [BatteryString stringByAppendingFormat:@"%%"];
       self.BatteryLabel.text =Batall;
      Trip =[applicationContext objectForKey:@"trip"];
       self.DateLabel.text =[applicationContext objectForKey:@"date"];
       NSString *TempString = [applicationContext objectForKey:@"temp"];
       NSString *Heat = [TempString stringByAppendingFormat:@"oF"];
       self.TempLabel.text =Heat;
       
       self.LevelLabel.text =[applicationContext objectForKey:@"level"];
       NSString *LevelString = [applicationContext objectForKey:@"level"];
       int battery =[BatteryString intValue];
       if (battery <10) {
           self.BatteryLabel.textColor= [UIColor redColor];
       }
       else if ((battery >=20)&& (battery<=30)) {
           self.BatteryLabel.textColor= [UIColor yellowColor];
       }
       else if ((battery >30)&& (battery<=100)) {
           self.BatteryLabel.textColor= [UIColor greenColor];
       }
       else if (battery >110) {
           self.BatteryLabel.textColor= [UIColor redColor];
       }
       int temp =[TempString intValue];
       if (temp <70) {
           self.TempLabel.textColor= [UIColor blueColor];
       }
       else if ((temp >=70)&& (temp<=90)) {
           self.TempLabel.textColor= [UIColor greenColor];
       }
       else if (temp>90) {
           self.TempLabel.textColor= [UIColor redColor];
       }
       int level =[LevelString intValue];
       if (level <30) {
           self.LevelLabel.textColor= [UIColor redColor];
       }
       else if ((level >=30)&& (level<=200)) {
           self.LevelLabel.textColor= [UIColor greenColor];
       }
       else if (level>200) {
           self.LevelLabel.textColor= [UIColor redColor];
       }
       NSString *tripString = [applicationContext objectForKey:@"trip"];

       int trip =[tripString intValue];
       //NSString *battery =[applicationContext objectForKey:@"battery"];
       //NSLog(@"batterylevelwatch: %@",battery);
       if ((trip == 0.0)&&(trigger ==1)) {
           [self.OnOffButton setTitle:@"Filling"];
           WKAlertAction *action = [WKAlertAction actionWithTitle:@"OK" style:WKAlertActionStyleDefault handler:^{}];
           
           NSString *title = @"Alert";

           NSString *message = @"Your pool has started filling.";
           

           [self presentAlertControllerWithTitle:title message:message preferredStyle:WKAlertControllerStyleAlert actions:@[ action ]];
           trigger =2;
       }
       else if ((trip == 100.0)&& (trigger ==2)) {
           [self.OnOffButton setTitle:@"Full"];
           WKAlertAction *action = [WKAlertAction actionWithTitle:@"OK" style:WKAlertActionStyleDefault handler:^{}];
           
           NSString *title = @"Alert";

           NSString *message = @"Your pool has stopped filling.";
           

           [self presentAlertControllerWithTitle:title message:message preferredStyle:WKAlertControllerStyleAlert actions:@[ action ]];
          trigger =1;
       }
       else if ((trip == 50)&&(trigger ==1)) {
           [self.OnOffButton setTitle:@"Start"];
       }
       else if ((trip == 50)&&(trigger ==2)) {
           [self.OnOffButton setTitle:@"Stop"];
       }
       }
   else if (wifi){
       //do this
       NSPredicate *predicate = [NSPredicate predicateWithValue:YES];
       CKQuery *query = [[CKQuery alloc] initWithRecordType:@"MyPoolInfo" predicate:predicate];
       NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"createdAt" ascending:NO];
       query.sortDescriptors = @[sortDescriptor];
       CKQueryOperation *queryOp = [[CKQueryOperation alloc]initWithQuery:query];
       queryOp.resultsLimit = 1;
       [[CKContainer containerWithIdentifier:container].privateCloudDatabase performQuery:query
                                                           inZoneWithID:nil
                                                       completionHandler:^(NSArray *results, NSError *error) {
           
          
           if (error) {
               NSLog(@"An error occurred: %@",
                         [error localizedDescription]);
           }
           else {
               NSDictionary *dictionary =[results objectAtIndex:0];
              NSLog(@"temperature:%@",[dictionary objectForKey:@"temperature"]) ;
               NSLog(@"date:%@",[dictionary objectForKey:@"date"]) ;
               NSLog(@"trip:%@",[dictionary objectForKey:@"trip"]) ;
               NSLog(@"battery:%@",[dictionary objectForKey:@"battery"]) ;
               NSLog(@"level:%@",[dictionary objectForKey:@"level"]) ;
           }
       }];
   }
    
   else if (cellular){
       //do this
       NSPredicate *predicate = [NSPredicate predicateWithValue:YES];
       CKQuery *query = [[CKQuery alloc] initWithRecordType:@"MyPoolInfo" predicate:predicate];
       NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"createdAt" ascending:NO];
       query.sortDescriptors = @[sortDescriptor];
       CKQueryOperation *queryOp = [[CKQueryOperation alloc]initWithQuery:query];
       queryOp.resultsLimit = 1;
       [[CKContainer containerWithIdentifier:container].privateCloudDatabase performQuery:query
                                                           inZoneWithID:nil
                                                       completionHandler:^(NSArray *results, NSError *error) {
           
          
           if (error) {
               NSLog(@"An error occurred: %@",
                         [error localizedDescription]);
           }
           else {
               NSDictionary *dictionary =[results objectAtIndex:0];
              NSLog(@"temperature:%@",[dictionary objectForKey:@"temperature"]) ;
               NSLog(@"date:%@",[dictionary objectForKey:@"date"]) ;
               NSLog(@"trip:%@",[dictionary objectForKey:@"trip"]) ;
               NSLog(@"battery:%@",[dictionary objectForKey:@"battery"]) ;
               NSLog(@"level:%@",[dictionary objectForKey:@"level"]) ;
           }
       }];
   }

}

can someone show me how to do this or point me to an example or tutorial.

question from:https://stackoverflow.com/questions/65833529/determine-if-watch-is-bluetooth-paired-wifi-or-needs-to-use-cellular-objective

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...