美文网首页
iOS获取所连路由器的mac地址与GPS打卡功能(未验证)

iOS获取所连路由器的mac地址与GPS打卡功能(未验证)

作者: 年少也曾轻狂 | 来源:发表于2018-07-30 11:17 被阅读0次

    接下来要做类似钉钉的打卡功能,提前收集资料

    #import <SystemConfiguration/CaptiveNetwork.h>
    
    #import <SystemConfiguration/SystemConfiguration.h>
    
    
    
    - (NSString *)getWiFiMac{
    
        NSString *ssid = @"Not Found";
    
        NSString *macIp = @"Not Found";
    
        CFArrayRef myArray =CNCopySupportedInterfaces();
    
        if (myArray != nil) {
    
        CFDictionaryRef myDict =CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(myArray,0));
    
        if (myDict != nil) {
    
            NSDictionary *dict = (NSDictionary*)CFBridgingRelease(myDict);
    
            ssid = [dict valueForKey:@"SSID"];           //WiFi名称
    
            macIp = [dict valueForKey:@"BSSID"];     //Mac地址
    
        }
    
    }
    
    return macIp;
    

    }

    网上找的获取wifi名称和mac地址的方法,还未验证

    至于gps定位打卡,目前思路是根据中心点与半径设置一块区域,监听人员进出区域来完成

    [self.mgr startMonitoringForRegion:region]; --> 开启区域监听,没有返回值,在代理方法中得到信息并且处理信息 注:该方法只有用户位置发生变化的时候,相应的代理方法才会触发
    [self.mgr requestStateForRegion:region]; -->根据指定区域请求一下用户现在的位置状态(CLRegionStateUnknown, CLRegionStateInside, CLRegionStateOutside),没有返回值,同样也是在代理方法中处理信息 注:该方法在程序一启动就会请求用户的位置状态.同样当用户位置发生变化时,也会触发相应的代理方法

    • (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region --> 进入指定区域后执行的代码
    • (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region --> 离开指定区域后执行的代码
    • (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region --> 在指定区域内确定了状态后触发的代理方法

    网络上代码

    #import "ViewController.h"
    #import <CoreLocation/CoreLocation.h>
    
    @interface ViewController ()<CLLocationManagerDelegate>
    /** 位置管理者 */
    @property(nonatomic,strong) CLLocationManager *mgr;
    @property (weak, nonatomic) IBOutlet UILabel *msgLabel;
    
    @end
    
    @implementation ViewController
    
    #pragma mark - 懒加载
    - (CLLocationManager *)mgr
    {
        if (_mgr == nil) {
            _mgr = [[CLLocationManager alloc] init];
            _mgr.delegate = self;
            // 区域监听,监听的是用户,所以应该让用户授权获取用户当前位置
            if ([_mgr respondsToSelector:@selector(requestAlwaysAuthorization)]) {
                [_mgr requestAlwaysAuthorization];
            }
        }
        return _mgr;
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        // ###细节二:判断设备是否支持区域监听(指定区域类型,一般是圆形区域)
        if (![CLLocationManager isMonitoringAvailableForClass:[CLCircularRegion class]]) {
            return;
        }
    
        // 0.给定一个区域
        // 0.1 区域的中点坐标
        CLLocationCoordinate2D center = CLLocationCoordinate2DMake(22.22, 33.33);
        // 0.2区域半径
        CLLocationDistance distance = 1000.0;
        // ###细节一:半径有限制
        if (distance > self.mgr.maximumRegionMonitoringDistance) {
            distance = self.mgr.maximumRegionMonitoringDistance;
        }
        CLCircularRegion *region = [[CLCircularRegion alloc] initWithCenter:center radius:distance       identifier:@"Chaos"];
    
        // 1.开启区域监听 代理中操作 -- 该方法只有用户位置发生了移动才会触发
        //    [self.mgr startMonitoringForRegion:region];
        // 1.根据指定区域请求一下监听到的状态 代理中操作 -- 该方法在程序启动就会监听一下用户的位置
        // 同样当用户位置发生变化时,也会触发相应的代理方法
        [self.mgr requestStateForRegion:region];
    }
    
    #pragma mark - CLLocationManagerDelegate
    
    /**
     *  进入指定区域后指定的代码
     *
     *  @param manager 位置管理者
     *  @param region  指定的区域
     */
    - (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
    {
        NSLog(@"进入区域--");
        self.msgLabel.text = @"欢迎光临--";
    }
    /**
     *  离开指定区域后执行的代码
     *
     *  @param manager 位置管理者
     *  @param region  指定的区域
     */
    - (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
    {
        NSLog(@"离开区域--");
        self.msgLabel.text = @"下次再来--";
    }
    
    - (void)locationManager:(CLLocationManager *)manager didDetermineState:    (CLRegionState)state forRegion:(CLRegion *)region
    {
        /*
         CLRegionStateUnknown, 不知道
         CLRegionStateInside, 进入区域
         CLRegionStateOutside 离开区域
       */
        if (state == CLRegionStateInside) {
    
            self.msgLabel.text = @"欢迎光临";
        } else if (state == CLRegionStateOutside) {
    
            self.msgLabel.text = @"下次再来";
        }
    }
    
    @end
    

    以上资料为网络收集,尚未验证,开发完成后会对资料进行修改!

    相关文章

      网友评论

          本文标题:iOS获取所连路由器的mac地址与GPS打卡功能(未验证)

          本文链接:https://www.haomeiwen.com/subject/twgxvftx.html