Çalışma arka planda bir iBeacon olarak iPhone
Mümkün Bluetooth LE bir çevre olarak iOS 7 cihaz (iBeacon) çalıştırın ve arka planda reklam var mı? Bu kod ile ön plana altında reklam almak mümkün olmuştur ve reklam duruyor ana ekran için başka bir iOS cihazı ama geri dönmeden hemen görebiliyor. Bu plist bluetooth-çevre arka modu ekleme yaptım ama bu cihaz arka planda bluetooth kullanmak istiyor istemi söyleyerek yapsam bile yardım etmiyordu. Ben yanlış bir şey yapıyorum ya da bu sadece iOS 7'de mümkün değil mi?
peripManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil];
- (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral
{
if (peripheral.state != CBPeripheralManagerStatePoweredOn) {
return;
}
NSString *identifier = @"MyBeacon";
//Construct the region
CLBeaconRegion *beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:identifier];
//Passing nil will use the device default power
NSDictionary *payload = [beaconRegion peripheralDataWithMeasuredPower:nil];
//Start advertising
[peripManager startAdvertising:payload];
}
Burada alma/dinleme ucunda kodu:
- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons
inRegion:(CLBeaconRegion *)region
{
//Check if we have moved closer or farther away from the iBeacon…
if (beacons.count > 0) {
CLBeacon *beacon = [beacons objectAtIndex:0];
switch (beacon.proximity) {
case CLProximityImmediate:
[self log:[NSString stringWithFormat:@"You're Sitting on it! %li", (long)beacon.rssi]];
break;
case CLProximityNear:
[self log:[NSString stringWithFormat:@"Getting Warmer! %li", (long)beacon.rssi]];
break;
default:
[self log:[NSString stringWithFormat:@"It's around here somewhere! %li", (long)beacon.rssi]];
break;
}
}
}
CEVAP
Standart CoreBluetooth reklam uygulaması arka planda iken, ama eğer CLBeaconRegion
sözlük ile başlamış olsalardı yayınlanmadı. CoreLocation çerçeve tamamen hendek ve kendi oluşturmak için geçici yakınlık "çerçeve" kullanarak sadece CoreBlueTooth.
Yine de bu Bilgi uygun bir arka plan belirteçleri kullanmak gerekir.plıst dosya (örneğin bluetooth-peripheral
bluetooth-central
).
Kod şöyle görünür:
1) standart bir çevre reklam CBPeripheralManager
kullanarak oluşturun
NSDictionary *advertisingData = @{CBAdvertisementDataLocalNameKey:@"my-peripheral",
CBAdvertisementDataServiceUUIDsKey:@[[CBUUID UUIDWithString:identifier]]};
// Start advertising over BLE
[peripheralManager startAdvertising:advertisingData];
2) kullanın. CBCentralManager
servis için UUID belirtilen kullanarak taramak için kullanın.
NSDictionary *scanOptions = @{CBCentralManagerScanOptionAllowDuplicatesKey:@(YES)};
NSArray *services = @[[CBUUID UUIDWithString:identifier]];
[centralManager scanForPeripheralsWithServices:services options:scanOptions];
3) CBCentralManagerDelegate
yöntemi didDiscoverPeripheral
reklam RSSI
değeri okuyun.
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral
advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
{
NSLog(@"RSSI: %d", [RSSI intValue]);
}
4) bir mesafe içine karanlıkta çalışırken değerleri Çevirir.
- (INDetectorRange)convertRSSItoINProximity:(NSInteger)proximity
{
if (proximity < -70)
return INDetectorRangeFar;
if (proximity < -55)
return INDetectorRangeNear;
if (proximity < 0)
return INDetectorRangeImmediate;
return INDetectorRangeUnknown;
}
"" Veya "ortalama" işe yarar bir şey almak için karanlıkta çalışırken değerleri. kolaylaştırmak için gerekli buldum Bu herhangi bir sensör verileri (örneğin ivme verileri) ile çalışırken daha farklı değil.
Bu kavramı tam olarak umarım bir yerde bir noktada yayınlamak için çalışıyor.
Eğer zor durumda kalırsanız da kullan docs (Core Bluetooth Programlama Kılavuzu).
Güncelleme:21**. work related project bir parçası olarak bu konuda çalıştım.
Güncelleme #2:Apple release major improvements to iBeacon background behavior for iOS7.1
Nasıl her zaman arka planda bir hizmet...
Tam olarak CoreBluetooth uygulama arka...
Esneme ve ölçek CSS ile arka planda CS...
Arka plan görev, ilerleme, iletişim, y...
Nasıl arka plan işlemi olarak çalıştır...