【问题标题】:Multiple implementations of CLLocationManagerCLLocationManager 的多种实现
【发布时间】:2014-09-18 14:27:51
【问题描述】:

我想知道在一个应用中实现两个使用 CLLocationManager 功能的不同 SDK 是否有问题。

两个 SDK 都在监控 CLBeaconRegions,并且都使用 CLLocationManager 实例和委托实现实现了不同的类。

可能的问题:

如果其中一个 SDK 将所有受监控的 CLBeaconRegions 从它的 CLLocationManager 中删除会怎样。这是否也会影响其他 SDK 的 CLLocationManager?

如果两个 SDK 开始寻找相同的 UUID(但具有不同的 CLBeaconRegion 标识符)会怎样...是否都获得了委托调用?

我想不出这不起作用的任何其他原因,但也许我错过了什么?

【问题讨论】:

    标签: ios cllocationmanager ibeacon


    【解决方案1】:

    您是否尝试过共享实例? 您可以做的是尝试使用相同的位置管理器实例来管理您的代码。 因此,委托的任何更改都可能反映在单个类中,您可以从那里管理您的代码。

    示例:- .h

    #import <Foundation/Foundation.h>
    #import <CoreLocation/CoreLocation.h>
    @interface LocationManager : NSObject <CLLocationManagerDelegate>
    @property (nonatomic,strong) CLLocationManager         *objLocationManager;
    @property (nonatomic,assign) CLLocationCoordinate2D    currentcoordinate;
    + (LocationManager *) SharedInstance;
    + (CLLocation *)      currentLocation;
    @end
    

    .m

    #define currentCordinates [LocationManager SharedInstance].currentcoordinate
    #define currentLocationmanger   [LocationManager SharedInstance].objLocationManager
    // Shared Manager
    static LocationManager *SharedInstance = nil;
    
    + (LocationManager *) SharedInstance
    {
        @synchronized(self)
        {
            if (SharedInstance == nil)
            {
                SharedInstance = [[super allocWithZone:NULL] init];
                currentLocationmanger = [[CLLocationManager alloc]init];
                currentLocationmanger.delegate = [LocationManager SharedInstance];
    
    
                /* Pinpoint our location with the following accuracy:
                 *
                 *     kCLLocationAccuracyBestForNavigation  highest + sensor data
                 *     kCLLocationAccuracyBest               highest
                 *     kCLLocationAccuracyNearestTenMeters   10 meters
                 *     kCLLocationAccuracyHundredMeters      100 meters
                 *     kCLLocationAccuracyKilometer          1000 meters
                 *     kCLLocationAccuracyThreeKilometers    3000 meters
                 */
                currentLocationmanger.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
    
                /* Notify changes when device has moved x meters.
                 * Default value is kCLDistanceFilterNone: all movements are reported.
                 */
                currentLocationmanger.distanceFilter = 2.0f;
    
                /* Notify heading changes when heading is > 5.
                 * Default value is kCLHeadingFilterNone: all movements are reported.
                 */
                currentLocationmanger.headingFilter = 5;
    
                [LocationManager SharedInstance].geocoder = [[CLGeocoder alloc] init];
    
                [[LocationManager SharedInstance].objLocationManager startUpdatingLocation];
    
                // update location
                if ([CLLocationManager locationServicesEnabled]){
                    [currentLocationmanger startMonitoringSignificantLocationChanges];
                }
            }
        }
        return SharedInstance;
    }
    

    //在.m中管理的其他委托和东西

    当你使用时,有些地方是与共享的 intace 一起使用

    //region.span = span;
        region.center = [LocationManager SharedInstance].currentcoordinate;
    

    【讨论】:

    • 感谢您的回答。我明白了这个原则,但现在它并不真正相关,因为我无法应用这个,因为我使用了两个第三方 SDK...
    • 你用过哪个sdk?
    • 两个来自 iBeacon 公司的 SDK(不是来自 iBeacon 制造商)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 2011-11-29
    • 1970-01-01
    相关资源
    最近更新 更多