Benim hedef-c başvurumun sonlandırılmış bir durumdan uygulamayı uyandırmak için sonlandırıldıktan sonra hemen iBeacon kullanması gereken bir kullanım durumum var. , BLE'ye bağlanın ve cihaza bir komut gönderin. Gerekirse kodumu kontrol edebileceğiniz daha uzun bir post found here çalıştırıyorum.OBJ-C Nasıl Yapılır: Aynı cihazda BLE bağlantısı ve iBeacon kullanarak uygulama
Sorun şu ana kadar
sorun, ben uygulamayı çalıştırdığınızda, önceden eşleştirilmiş cihazlar için arama ve/veya çevre birimleri için tarama, benim BLE cihaz bulmak ve bağlanmak olmuyor. Bir kez bağlandığında, kullanıcı BLE bağlantısını çiftleştirerek, BLE bağlantısı üzerinden şifrelenmiş karakteristik veri gönderebilsinler. Eşleştirme olmadan (aygıtın adlandırma kurallarında auth/bond olarak adlandırılır), kullanıcı verileri aygıta gönderemez. Asla orada yapmaz. En kısa zamanda ... komutunu gönderebilir eşleştirmek
Ben
- (void)applicationWillTerminate:(UIApplication *)application {
NSLog(@"*** Application Will Terminate.");
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSNumber *mode = [userDefaults objectForKey:@"deviceConnectedMode"];
if([mode intValue] == CONNECTED_MODE_INDICATOR) {
[self.bluetoothManager sendCodeToBTDevice:@"magiccommand1"
characteristic:self.bluetoothManager.wipeCharacteristic];
//I have been turning this command on and off in testing to see if I can get it to work better while disconnecting in the device rather than in the app...
//The command magiccommand2 wipes the auth/bond inside of the device
// [self.bluetoothManager sendCodeToBTDevice:@"magiccommand2"
// characteristic:self.bluetoothManager.disconnectCharacteristic];
//Place where I attempt to stop being connected to BT
[self.bluetoothManager disconnectDevice];
[self.beaconManager startMonitoring];
NSLog(@"*** Application terminated from connected mode!");
} else {
NSLog(@"*** DriveCare terminated without violation!");
}
}
ben başarmaya çalışıyorum ne ... applicationWillTerminate
yönteminde, bu kod üzerinden çalıştırmak, uygulamayı sonlandırmak zaman olduğu gibi
magiccommand1
ve magiccommand2
komutları cihazın seri bağlantı noktası üzerinden dinliyor ki (şimdilik 128 bitlik jetonları sonrası) sadece aptalca testi dizelerdir. Komutları aldıklarında, cihazdaki auth/bond'u silmeye ve cihazda BLE'den ayrılmaya çalışarak tepki verirler.
Bu yüzden uygulamanın sonlandırılmış bir durumdan uyanmasını sağlayabildiğim tek yol iBeacon'dur. Bu yüzden bir kare delikte bu yuvarlak peg almak için burada bir sürü kirli şeyler yapmak zorundayım. Uygulamanın yaşam döngüsünde bağlanır ve eşleşir ve sonlandırdığımda BLE'den bağlı bir aygıt olarak tamamen kaldırılmasını istiyorum. Umarız, iBeacon uygulamayı uyandırır, BLE'ye geri bağlanır, iBeacon izlemesini kapatır ve BLE aygıtına sonlandırılmış bir durumdan bir komut gönderir. Bu, iBeacon'dan BLE'ye ve arkaya açıldığında/kapatıldığında veya bağlantıyı keserken/çıkarırken kullanıcının büyük olasılıkla yeniden eşleşmesine neden olur ve ben bunu istemiyorum.
Daha Sorunları
ben [self.centralManager cancelPeripheralConnection:self.thePeripheral];
diyoruz iOS sistem düzeyinde BT yöneticisi oto görünüyor neredeyse anında yeniden (çünkü eşleştirme ait) bu yüzden bağlantı kopmuş olması ve iBeacon alınmayı zaman yoktur tekrar yukarı. Bağlantı kesme komutunu benim kutuya göndermeden önce centralManager
örneğimden bağlantıyı kesmeye çalışırsam (kodda göründüğü gibi), açıkça gönderilmeyeceklerdir. Yalnızca bu CBCentralManager
bağlantı kesme yöntemini kullanırsam, iOS sistemi hala aygıtla eşleştirildiği için iBeacon'un algılanmaya başlaması yeterli değildir. Son olarak, daha sonra iOS sistem BT yöneticime gidip "Bu cihazı unut" u seçersem, iBeacon tekrar alır ve didEnterRegion
yöntem yangınlarım olur!
Bu iBeacon ve BLE arasında bir çok ileri ve geri ve ben sadece uygulamayı uyandırmak için iBeacon'a bile ihtiyaç duymadım. Ben tüm info.plist arka plan BLE ve iBeacon hizmetleri açık. BLE'ye hiç bağlanmadım ve hiçbir zaman bir kez eşleşmiyor ve cihazımı bağlamazsam, yerel uygulama bildirimleri, iBeacon didEnterRegion
ve didExitRegion
yöntemlerinin sorunsuz bir şekilde tetiklendiğini bildiren bir sorun olmadan kayıyor.
Burada yanlış olan ne yapıyorum?