国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

iOS開發(fā)-CoreNFC實現(xiàn)NFC標簽Tag讀取功能

這篇具有很好參考價值的文章主要介紹了iOS開發(fā)-CoreNFC實現(xiàn)NFC標簽Tag讀取功能。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

iOS開發(fā)-CoreNFC實現(xiàn)NFC標簽Tag讀取功能
iOS開發(fā)-CoreNFC實現(xiàn)NFC標簽Tag讀取功能,移動開發(fā),iphone開發(fā),Objective-c,1024程序員節(jié),android,flutter,objective-c

一、NFC近場通信

近場通信(NFC)是一種無線通信技術(shù),它使設(shè)備能夠在不使用互聯(lián)網(wǎng)的情況下相互通信。它首先識別附近配備NFC的設(shè)備。NFC常用于智能手機和平板電腦。

二、實現(xiàn)NFC標簽Tag讀取功能

在iOS中提供了CoreNFC來實現(xiàn)NFC標簽Tag讀取功能。主要使用的類是NFCTagReaderSession。
NFCTagReaderSession配置讀取器會話的RF輪詢;可以將多個選項“或”運算在一起。此選項會影響可能的NFC標簽類型。同時需要實現(xiàn)delegate來實現(xiàn)掃描的回調(diào)。

NFCTagReaderSession初始化

 if (@available(iOS 13.0, *)) {
        if (NFCNDEFReaderSession.readingAvailable) {
            self.tagSession = [[NFCTagReaderSession alloc]
                                initWithPollingOption:(NFCPollingISO14443 | NFCPollingISO15693 | NFCPollingISO15693) delegate:self queue:dispatch_get_main_queue()];
            self.tagSession.alertMessage = @"讀取卡片,請將卡片靠近手機";
            [self.tagSession beginSession]; //開始識別 彈出識別提示框
        }else{
            NSLog(@"NFC功能只支持iphone7以及iOS13.0以上設(shè)備");
        }
    }else{
        NSLog(@"NFC功能只支持iphone7以及iOS13.0以上設(shè)備");
    }
    

NFCNDEFReaderSessionDelegate的相關(guān)方法

  • 識別結(jié)果的回調(diào)

-(void)readerSession:(NFCNDEFReaderSession *)session didDetectNDEFs:(NSArray<NFCNDEFMessage *> *)messages API_AVAILABLE(ios(11.0))

  • 錯誤回調(diào)

-(void)readerSession:(NFCNDEFReaderSession *)session didInvalidateWithError:(NSError *)error API_AVAILABLE(ios(11.0))

  • 在Session無效時調(diào)用
  • (void)tagReaderSession:(NFCTagReaderSession *)session didInvalidateWithError:(NSError *)error API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(watchos, macos, tvos)
  • 當NFC讀取器會話變?yōu)锳ctive時調(diào)用
  • (void)tagReaderSessionDidBecomeActive:(NFCTagReaderSession *)session API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(watchos, macos, tvos)
  • 當讀取器在輪詢序列中檢測到NFC標記時調(diào)用
  • (void)tagReaderSession:(NFCTagReaderSession *)session didDetectTags:(NSArray<__kindof id> *)tags API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(watchos, macos, tvos)

實現(xiàn)識別NFC標簽Tag完整代碼如下

#import "INNFCExampleViewController.h"
#import <CoreNFC/CoreNFC.h>

API_AVAILABLE(ios(11.0))
@interface INNFCExampleViewController ()<NFCNDEFReaderSessionDelegate, NFCTagReaderSessionDelegate>

@property (nonatomic, strong) NFCNDEFReaderSession *session;

@property (nonatomic, strong) NFCTagReaderSession *tagSession;
 
@property (nonatomic, strong) id<NFCMiFareTag> currentTag;

@property (nonatomic, strong) UILabel *showLabel;

@end

@implementation INNFCExampleViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    self.view.backgroundColor = [UIColor whiteColor];
    
    UIButton *startQueryBtn;
    startQueryBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    startQueryBtn.frame = CGRectMake(50, 100, 60, 36);
    startQueryBtn.layer.cornerRadius = 4;
    startQueryBtn.backgroundColor = [UIColor brownColor];
    [startQueryBtn setTitle:@"開始識別" forState:UIControlStateNormal];
    [startQueryBtn addTarget:self action:@selector(startQueryBtnClick) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:startQueryBtn];
    
    UIButton *endQueryBtn;
    endQueryBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    endQueryBtn.frame = CGRectMake(250, 100, 60, 36);
    endQueryBtn.layer.cornerRadius = 4;
    endQueryBtn.backgroundColor = [UIColor brownColor];
    [endQueryBtn setTitle:@"結(jié)束識別" forState:UIControlStateNormal];
    [endQueryBtn addTarget:self action:@selector(endQueryBtnClick) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:endQueryBtn];
}

- (void)startQueryBtnClick {
    
    if (@available(iOS 13.0, *)) {
        if (NFCNDEFReaderSession.readingAvailable) {
            self.tagSession = [[NFCTagReaderSession alloc]
                                initWithPollingOption:(NFCPollingISO14443 | NFCPollingISO15693 | NFCPollingISO15693) delegate:self queue:dispatch_get_main_queue()];
            self.tagSession.alertMessage = @"讀取卡片,請將卡片靠近手機";
            [self.tagSession beginSession]; //開始識別 彈出識別提示框
        }else{
            NSLog(@"NFC功能只支持iphone7以及iOS13.0以上設(shè)備");
        }
    }else{
        NSLog(@"NFC功能只支持iphone7以及iOS13.0以上設(shè)備");
    }
    
    /**
     //如果希望讀取多個標簽invalidateAfterFirstRead設(shè)置為NO
     if (@available(iOS 11.0, *)) {
         __weak typeof(self) weakSelf = self;
         self.session = [[NFCNDEFReaderSession alloc] initWithDelegate:weakSelf queue:dispatch_queue_create(NULL, DISPATCH_QUEUE_CONCURRENT) invalidateAfterFirstRead:YES];
         [self.session beginSession];
     } else {
         // Fallback on earlier versions
     }
     */
}

- (void)endQueryBtnClick {
    
    /**
     if (@available(iOS 11.0, *)) {
         [self.session invalidateSession];
     } else {
         // Fallback on earlier versions
     }
     */
}

#pragma mark -- <NFCNDEFReaderSessionDelegate>

//掃描到的回調(diào)

-(void)readerSession:(NFCNDEFReaderSession *)session didDetectNDEFs:(NSArray<NFCNDEFMessage *> *)messages API_AVAILABLE(ios(11.0)){

    for (NFCNDEFMessage *message in messages) {
        for (NFCNDEFPayload *payload in message.records) {
            NSLog(@"readerSession payload data = %@", payload.payload);
            NSString *str = [[NSString alloc] initWithData:payload.payload encoding:NSUTF8StringEncoding];
            //回到主線程
            dispatch_async(dispatch_get_main_queue(), ^{
                NSLog(@"readerSession str:%@",str);
            });
        }
    }
}

//錯誤回調(diào)


-(void)readerSession:(NFCNDEFReaderSession *)session didInvalidateWithError:(NSError *)error API_AVAILABLE(ios(11.0)){
    NSLog(@"readerSession didInvalidateWithError error:%@", error);
}


#pragma mark -- NFCTagReaderSessionDelegate

/*!
 * @method tagReaderSession:didInvalidateWithError:
 *
 * @param session   The session object that is invalidated.
 * @param error     The error indicates the invalidation reason.
 *
 * @discussion      Gets called when a session becomes invalid.  At this point the client is expected to discard
 *                  the returned session object.
 */
- (void)tagReaderSession:(NFCTagReaderSession *)session didInvalidateWithError:(NSError *)error API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(watchos, macos, tvos) {
    NSLog(@"tagReaderSession didInvalidateWithError error:%@", error);
    if (error.code == 200) {
        return;
    }
    [session invalidateSession];
}

/*!
 * @method tagReaderSessionDidBecomeActive:
 *
 * @param session   The session object in the active state.
 *
 * @discussion      Gets called when the NFC reader session has become active. RF is enabled and reader is scanning for tags.
 *                  The @link readerSession:didDetectTags: @link/ will be called when a tag is detected.
 */
- (void)tagReaderSessionDidBecomeActive:(NFCTagReaderSession *)session API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(watchos, macos, tvos) {
    NSLog(@"tagReaderSession tagReaderSessionDidBecomeActive");
}

/*!
 * @method tagReaderSession:didDetectTags:
 *
 * @param session   The session object used for tag detection.
 * @param tags      Array of @link NFCTag @link/ objects.
 *
 * @discussion      Gets called when the reader detects NFC tag(s) in the polling sequence.
 */
- (void)tagReaderSession:(NFCTagReaderSession *)session didDetectTags:(NSArray<__kindof id<NFCTag>> *)tags API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(watchos, macos, tvos) {
    _currentTag = [tags firstObject];
    NSData *data ;
    if (self.currentTag.type == NFCTagTypeMiFare) {
        id<NFCMiFareTag> mifareTag = [self.currentTag asNFCMiFareTag];
        data = mifareTag.identifier;
    }else if (self.currentTag.type == NFCTagTypeISO15693){
        id<NFCISO15693Tag> mifareTag = [self.currentTag asNFCISO15693Tag];
        data = mifareTag.identifier;
    }else if (self.currentTag.type == NFCTagTypeISO15693){
        id<NFCISO15693Tag> mifareTag = [self.currentTag asNFCISO15693Tag];
        data = mifareTag.identifier;
    }else{
        NSLog(@"未識別出NFC格式");
    }
        
    NSString *str = [self convertDataBytesToHex:data];
    NSLog(@"tagReaderSession didDetectTags str:%@", str);
    
    //識別成功處理
    [session invalidateSession];
}
     
     
     
- (NSString *)convertDataBytesToHex:(NSData *)dataBytes {
    if (!dataBytes || [dataBytes length] == 0) {
        return @"";
    }
    NSMutableString *hexStr = [[NSMutableString alloc] initWithCapacity:[dataBytes length]];
    [dataBytes enumerateByteRangesUsingBlock:^(const void *bytes, NSRange byteRange, BOOL *stop) {
        unsigned char *dataBytes = (unsigned char *)bytes;
        for (NSInteger i = 0; i < byteRange.length; i ++) {
            NSString *singleHexStr = [NSString stringWithFormat:@"%x", (dataBytes[i]) & 0xff];
            if ([singleHexStr length] == 2) {
                [hexStr appendString:singleHexStr];
            } else {
                [hexStr appendFormat:@"0%@", singleHexStr];
            }
        }
    }];
    return hexStr;
}



@end


至此,NFC標簽Tag讀取功能代碼完成。

三、小結(jié)

iOS開發(fā)-CoreNFC實現(xiàn)NFC標簽Tag讀取功能

學(xué)習(xí)記錄,每天不停進步。文章來源地址http://www.zghlxwxcb.cn/news/detail-733483.html

到了這里,關(guān)于iOS開發(fā)-CoreNFC實現(xiàn)NFC標簽Tag讀取功能的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Android 實現(xiàn) NFC 讀取卡片信息

    Android 實現(xiàn) NFC 讀取卡片信息

    效果圖: 因為朋友需要個讀取NFC卡片數(shù)據(jù)的功能,所以最近看了一下Android 系統(tǒng)下NFC 讀取卡片信息的操作。 NFC(近距離無線通信 ) 是一組近距離無線技術(shù),通常只有在距離不超過 4 厘米時才能啟動連接.借助 NFC,您可以在 NFC 標簽與 Android 設(shè)備之間或者兩臺 Android 設(shè)備之間共享小

    2024年02月01日
    瀏覽(20)
  • dedecms如何實現(xiàn)tag標簽偽靜態(tài)的方法

    dedecms的tag標簽是一個很好管理的功能,通過tag標簽可以找到相關(guān)的內(nèi)容。但是dedecms的tag標簽系統(tǒng)默認是//www.yii666.net/tags.php?/tag標簽/如下圖。不利于SEO優(yōu)化。那么如何將TAGS靜態(tài)化呢?(即改成//www.yii666.net/tags/1.html)。 這里主要是通過修改調(diào)用的標簽進行偽靜態(tài)。

    2024年02月02日
    瀏覽(33)
  • 基于Sane成功解決路由器改OpenWrt打印掃描服務(wù)器的手機移動端(IOS、Android)掃描功能實現(xiàn)問題

    基于Sane成功解決路由器改OpenWrt打印掃描服務(wù)器的手機移動端(IOS、Android)掃描功能實現(xiàn)問題

    家里有一臺HP打印掃描一體機HP DJ 2300 series PCL-3,不具備打印和掃描功能。之后買了一個TPlink的wr703n路由器,刷了OpenWrt系統(tǒng),安裝p910nd,通過9100端口的方式實現(xiàn)了無線打?。ň唧w看我寫的這篇:TP-LINK-TL-WR703N(原裝)制作打印服務(wù)器過程記錄整理)。但在后期的使用過程中,

    2024年02月06日
    瀏覽(85)
  • DedeCMS系統(tǒng)TAG標簽和分頁偽靜態(tài)設(shè)置教程的實現(xiàn)

    現(xiàn)在好多CMS系統(tǒng)都有TAGS標簽這項功能,知名的DEDECMS也有,但是它的標簽功能很差,不利于seo優(yōu)化,同時也有很多問題,比如:當前頁不存在上一頁時,鏈接為“-1”的問題,還有出現(xiàn)“系統(tǒng)無此標簽,可能已經(jīng)移除”的問題。 今天小編就教大家把標簽偽靜態(tài)(部分資料來源

    2024年02月02日
    瀏覽(23)
  • vue后臺項目左側(cè)菜單欄配合element-ui中tag標簽實現(xiàn)多標簽頁導(dǎo)航欄

    vue后臺項目左側(cè)菜單欄配合element-ui中tag標簽實現(xiàn)多標簽頁導(dǎo)航欄

    效果圖 第一步:設(shè)置左側(cè)菜單欄 左側(cè)菜單欄,左側(cè)菜單我這邊自定義寫死的數(shù)據(jù)。 分為有子菜單和沒子菜單等情況,我用到的只有倆種,沒有三級菜單。 HTML部分

    2024年02月11日
    瀏覽(38)
  • iOS開發(fā) - 系統(tǒng)自帶框架實現(xiàn)掃一掃功能

    iOS開發(fā) - 系統(tǒng)自帶框架實現(xiàn)掃一掃功能

    iOS 掃一掃 利用系統(tǒng)自帶框架實現(xiàn)掃一掃功能 掃一掃功能相機和相冊權(quán)限,在info.plist中設(shè)置詢問用戶是否允許訪問的權(quán)限。 info.plist加入NSCameraUsageDescription、NSPhotoLibraryUsageDescription、NSPhotoLibraryAddUsageDescription 當每次進入掃一掃頁面時,需要判斷是否開啟了權(quán)限 AVCaptureDevice:

    2024年02月15日
    瀏覽(21)
  • 鴻蒙智聯(lián):NFC標簽

    鴻蒙智聯(lián):NFC標簽

    NFC標簽碰一碰功能可以實現(xiàn)設(shè)備的快速連接和配網(wǎng),無需掃描、選擇設(shè)備、輸入密碼等繁瑣操作,為用戶提供便捷的設(shè)備交互體驗;為了確保設(shè)備NFC標簽的可用性和可靠性,伙伴需要按照指定的要求生成NFC標簽樣品,并提交驗收測試。驗收測試通過之后,才能用于商用生產(chǎn)。

    2024年02月12日
    瀏覽(56)
  • NFC無源標簽協(xié)議

    NFC無源標簽協(xié)議

    無源NFC接口基于 ISO/IEC 14443-3 A 類標準; 命令+起始地址+結(jié)束地址+數(shù)據(jù) = 1+1+1+64 = 67字節(jié),每次寫入的命令和地址都是一樣的; 第一包數(shù)據(jù)必須發(fā)送該字符串數(shù)據(jù)\\\" picksmartM=1H=128W=296S=1C=1 \\\",否則不會處理后面的數(shù)據(jù); 因為每一包的數(shù)據(jù)必須發(fā)滿64字節(jié),而第一包字符串數(shù)據(jù)不夠6

    2024年02月07日
    瀏覽(18)
  • iOS開發(fā) - 檢測晃動/搖一搖功能UIAccelerometer與motion實現(xiàn)

    iOS檢測晃動/搖一搖功能實現(xiàn) app開發(fā)中,要實現(xiàn)檢測晃動/搖一搖功能,下面記錄下兩種方案

    2024年02月16日
    瀏覽(21)
  • Android NFC 讀取卡片信息

    因為朋友需要個讀取NFC卡片數(shù)據(jù)的功能,所以最近看了一下Android 系統(tǒng)下NFC 讀取卡片信息的操作. NFC(近距離無線通信 ) 是一組近距離無線技術(shù),通常只有在距離不超過 4 厘米時才能啟動連接.借助 NFC,您可以在 NFC 標簽與 Android 設(shè)備之間或者兩臺 Android 設(shè)備之間共享小型負載。

    2024年02月11日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包