我正在尝试通过我目前正在处理的iOS应用程序找到从我的信标访问电池电量的方法.我正在使用Kontakt的iBeacon设备.我浏览了Estimote iOS SDK,他们提供了实现此目的的方法.我想知道它是否能够访问原始信标数据包并手动提取数据,因为我知道信标数据包结构并且信息存在.
有关如何通过此处提到的方法或任何其他方式实现此目的的任何想法?
多谢你们.
过去几个月我一直在和iBeacons合作.我刚刚更新到iOS8 Beta 1,并发现区域监控和测距不再适用于我的beacon应用程序.
它是由权限引起的.我现在kCLErrorRegionMonitoringDenied在尝试启动区域监视时返回错误.此错误对应于用户取消选择应用程序的位置权限.
如果我进入设置>隐私>位置服务,我会得到一些奇怪的行为.有时我的应用程序会显示在此列表中而未选择任何设置,有时它根本不会出现在列表中.如果我手动将设置更改为"允许"然后关闭设置,然后返回设置>隐私>位置服务我遇到同样的问题 - 应用程序可能不会出现在列表中或设置未设置.
这显然是iOS8测试版中的一个错误,只是想知道是否有其他人有此问题和/或找到了解决方法?
我正在开发一个将iBeacons用于室内导航的应用程序,我发现locationManager:rangingBeaconsDidFailForRegion:withError:调用该函数的速率不够高,所以我要从CoreBluetooth中添加RSSI数据centralManager:didDiscoverPeripheral:advertisementData:RSSI:.
我发现了一个奇怪的事实:当我使用CoreLocation监听iBeacon并记录外设ID时:
- (void)centralManager:(CBCentralManager *)central
didDiscoverPeripheral:(CBPeripheral *)peripheral
advertisementData:(NSDictionary *)advertisementData
RSSI:(NSNumber *)RSSI
{
NSLog(@"%@, RSSI: %@", peripheral, RSSI);
Run Code Online (Sandbox Code Playgroud)
在不同设备上报告每个信标具有不同的UUID:
A25804BD-D77A-5004-4C2C-301D996C7367 - my iPhone 5
843F4237-6059-9A5E-AA34-0BD92304BE1F - colleague's iPhone 5
77685805-C253-52BD-B787-8B95308834FB - other colleague's iPad mini
Run Code Online (Sandbox Code Playgroud)
我们的想法是将每个信标的UUID绑定到它的位置,因此这种行为非常具有功能性.
为什么物理上相同的信标(未关闭/打开)的UUID在不同设备上有所不同?这是预期的行为吗?如果是,我怎么能选择退出呢?
我正在使用参考http://altbeacon.github.io/android-beacon-library/samples.html。我还使用过如何使用AltBeacon android-beacon-library检测多个信标的区域进入/退出?
我正在尝试使用AltBeacon的Android-Beacon-Library在后台检测iBeacon。我在我的项目中添加了以下代码段。到目前为止,我还没有在后台检测到ibeacons ...不胜感激
我正在使用BeaconManager
setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
Run Code Online (Sandbox Code Playgroud)
但是,我没有错误,也没有信标检测。在Samsung Galaxy 4设备上以调试方式运行应用程序时,应用程序会启动,但不会检测到活动信标。我的信标是配置为iBeacons的Rad信标。Rad Beacon应用程序会检测到它们,而其他在前台运行并检测到我的iBeacon的AltBeacon库应用程序也会检测到它们。这些应用程序在Samsung Galaxy 4上运行。
我为后台信标检测设置的应用程序...未检测到iBeacons。
这是我的代码。对Constants.java的引用只是我的应用程序的常量文件。
package com.myApp.BTleDemo;
import android.app.Application;
import android.content.Intent;
import android.util.Log;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Locale;
import org.altbeacon.beacon.startup.BootstrapNotifier;
import org.altbeacon.beacon.startup.RegionBootstrap;
import org.altbeacon.beacon.Region;
import org.altbeacon.beacon.BeaconConsumer;
import org.altbeacon.beacon.BeaconManager;
import org.altbeacon.beacon.BeaconParser;
import org.altbeacon.beacon.MonitorNotifier;
import org.altbeacon.beacon.RangeNotifier;
import org.altbeacon.beacon.Region;
import org.altbeacon.beacon.Identifier;
public class BackgroundMode extends Application implements BootstrapNotifier{
private static final String TAG = ".BackgroundMode";
private RegionBootstrap regionBootstrap;
private BeaconManager beaconManager;
SharedPreferences prefs;
List<Region> regions;
public void onCreate() …Run Code Online (Sandbox Code Playgroud) iBeacon突然停止在iOS8中工作.在以前的iOS 8版本中它运行良好之前.有人帮我解决这个问题吗?
有什么问题,谢谢
UUID,主要和次要值提供iBeacon的标识信息.
主要值和次要值用于区分区域内的产品或元素.Apple文档很清楚,如何做到这一点,商店的例子很安静.
然而,只有当每个区域(或子区域)存在一个元素类别时,所有这些都能很好地工作,但如果我们希望APP能够区分同一区域内具有相同次要和主要的元素,则它不能很好地工作.
是否有一些与iBeacon关联的其他唯一标识符可以被监视/检测,以便我可以区分具有相同次要和主要值的iBeacons?
编辑:其他信息
为了测试这个,我创建了两个具有相同UUID和相同主要和次要值的iBeacons,然后开始监视我指定的UUID中的iBeacons.
我为iBeacons实现的回调代码范围如下:
-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region {
NSLog(@"Did range %lu beacon in region %@", (unsigned long)[beacons count], region.identifier);
for (int i=0; i<[beacons count]; i++) {
CLBeacon *beacon = [beacons objectAtIndex:i];
// <- breakpoint!
NSString *_cnt = [[NSString alloc] initWithFormat:@"Number of beacons is : %lu and the current one %i is %f away from you %@",(unsigned long)[beacons count], i, …Run Code Online (Sandbox Code Playgroud) 根据蓝牙广告示例,我需要设置CompanyID(UInt16)和数据(IBuffer,示例中的 UInt16 )以开始观看广告商。
在 iPhone 中,我可以将信标 UUID 设置为4B503F1B-C09C-4AEE-972F-750E9D346784. 在互联网上阅读,我发现Apple 的公司 ID 是0x004C,所以我尝试了0x004C和 0x4C00。
所以,这是我到目前为止的代码,但当然,它不起作用。
var manufacturerData = new BluetoothLEManufacturerData();
// Then, set the company ID for the manufacturer data. Here we picked an unused value: 0xFFFE
manufacturerData.CompanyId = 0x4C00;
// Finally set the data payload within the manufacturer-specific section
// Here, use a 16-bit UUID: 0x1234 -> {0x34, 0x12} (little-endian)
var writer = …Run Code Online (Sandbox Code Playgroud) 我有一个带iOS 7.1的4s设备.我正在尝试实现一些代码,这些代码可以帮助我的设备像信标设备那样运行,但我收到错误"只能在启动状态下接受此命令".
我正在实现这段代码:
@implementation ViewController
-(void)viewDidLoad
{
[super viewDidLoad];
beaconPeripheralData=[[NSDictionary alloc]init];
peripheralManager.delegate=self;
_locationManager.delegate=self;
_locationManager = [[CLLocationManager alloc] init];
_locationManager.delegate = self;
[self initWithBeacons];
}
-(void)initWithBeacons
{
NSNumber * power = [NSNumber numberWithInt:-63];
NSUUID *uuid=[[NSUUID alloc]initWithUUIDString:@"F24BDBE3-EB98-4A04-A621-91C088DC32D2"];
CLBeaconRegion *beaconReason=[[CLBeaconRegion alloc]initWithProximityUUID:uuid major:1 identifier:@"blackbean.com"];
beaconPeripheralData=[beaconReason peripheralDataWithMeasuredPower:power];
peripheralManager=[[CBPeripheralManager alloc]initWithDelegate:self queue:nil];
[peripheralManager startAdvertising:beaconPeripheralData];
if ([peripheralManager isAdvertising])
{
NSLog(@"peripeheralMAnager is advertising");
}
else
{
NSLog(@"peripeheralMAnager is not advertising");
}
}
-(void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral {
switch (peripheral.state) {
case CBPeripheralManagerStatePoweredOn:
NSLog(@"Powered on");
[peripheralManager startAdvertising:beaconPeripheralData];
break;
case CBPeripheralManagerStatePoweredOff:
NSLog(@"Powered Off"); …Run Code Online (Sandbox Code Playgroud) 大家好,我确实从在线商店购买了新的iBeacon设备。但我没有得到关于这个信标的任何细节。我确实创建了一个iOS 应用程序来使用uuid检测附近的信标,但我不知道信标 uuid。请帮助我如何获取此设备的 uuid 和其他详细信息。有什么替代方法可以让我找到附近的信标吗?
这里是全新的。
Tl; dr:iOS 设备是否可以发布可由另一台 iOS 设备扫描的 CB 广告(CBAdvertisementDataServiceUUIDsKey 和/或 CBAdvertisementDataLocalNameKey)?
我相信我的问题是基于 iOS 更高版本中对 CoreBluetooth 和 CoreLocation 的弃用和更改的新鲜问题。另外,就目前而言,我仅指“前台”操作。
从我阅读和测试的内容来看,外围设备可以使用 CL 传输信标区域(唯一的邻近 UUID,主要和次要(但特别是没有“标识符”))。使用 CB,外围设备还可以“通告”两个少量额外数据中的任何一个:CBAdvertisementDataServiceUUIDsKey 和 CBAdvertisementDataLocalNameKey。
我无法实现的是让设备(例如 iPhone)使用 CB 扫描这些附加键中的任何一个,也没有我提到的使用 CL 或 CB 的可选“标识符”。
指定扫描的唯一选项需要 CBUUID,但未发现的 iOS 外围设备在技术上不能宣传:
central.scanForPeripherals(withServices: [CBUUID]?, options: [String : Any]?)
Run Code Online (Sandbox Code Playgroud)
似乎以下内容可行,但似乎 adsData 不包含上面的键,即使是 [String : Any]:
func centralManager(_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String : Any],
rssi RSSI: NSNumber){
//code
}
Run Code Online (Sandbox Code Playgroud)
任何帮助/答案将不胜感激。谢谢!