FNScanner二維碼接口openView自定義掃碼Demo

本文出自APICloud官方論壇

FNScanner 模塊是一個二維碼/條形碼掃描器,是 scanner 模塊的優化升級版。在 iOS 平臺上本模塊底層集成了 Zbar 和系統自帶的條形碼/二維碼分析庫,由於 IOS 系統平臺在 IOS7.0 以上纔開放了二維碼/條碼的相關接口,所以在 IOS6 上運行時模塊會調用開源庫 Zbar 去讀取解析二維碼/條碼。只有在 IOS7 以上版本纔會調用系統自帶掃碼功能。

模塊文檔地址:
docs.apicloud.com/Client-API/…

模塊需要注意的地方:

注意:使用本模塊前,需在雲編譯頁面勾選添加訪問攝像頭權限,若要訪問相冊也需溝通申請訪問相冊權限 。
不能同時使用的模塊:wwprint

本模塊封裝了兩套掃碼方案:
方案一
開發者通過調用 openScanner 接口直接打開自帶默認 UI 效果的二維碼/條形碼掃描頁面,本界面相當於打開一個 window 窗口,其界面內容不支持自定義。用戶可在此界面實現功能如下:
打開關閉閃關燈
從系統相冊選取二維碼/條碼圖片進行解密操作
打開攝像頭,自動對焦掃碼想要解析的二維碼/條碼
方案二
通過 openView 接口打開一個自定義大小的掃描區域(本區域相當於打開一個 frame)進行掃描。開發者可自行 open 一個 frame 貼在模塊上,從而實現自定義掃描界面的功能。然後配合使用 setFrame、closeView、switchLight 等接口實現開關閃光燈、重設掃描界面位置大小、圖片解碼、字符串編碼等相關功能。詳情請參考模塊接口參數。

方案一我就不介紹,因爲直接調取接口就能直接顯示一個掃碼ui界面,直接使用就可以, 樓主本帖分享的是方案一無法滿足ui設計效果前提下,怎麼實現ui自定義的效果;

方案二完成頁面截圖
FNScanner二維碼接口openView自定義掃碼Demo

方案二打開閃光燈效果界面截圖
FNScanner二維碼接口openView自定義掃碼Demo

第一步:首先先打開openwin,然後再打開模塊 ,然後延遲打開一個frm自定義一個掃碼見面。大家上面看到掃碼是這種思路的; 廢話不多說上部分核心源碼

var FNScanner, eHeader, headerH;
    apiready = function() {
        //應用全局FNScanner模塊
        FNScanner = api.require('FNScanner');
        //定義根據id獲取dom
        eHeader = $api.byId('header');
        //設置頭部沉浸式
        $api.fixStatusBar(eHeader);
        //獲取頭部高度
        headerH = $api.offset(eHeader).h;

        //監聽應用回到前臺
        api.addEventListener({
            name: 'resume'
        }, function(ret, err) {
            FNScanner.onResume();
        });

        //監聽應用回到後臺
        api.addEventListener({
            name: 'pause'
        }, function(ret, err) {
            FNScanner.onPause();
        });

        fnOpenFNScanner();
    }

    function fnOpenFNScanner() {
        // 打開掃碼模塊
        FNScanner.openView({
            //autorotation: true,
            fixedOn: api.frameName,
            rect: {
                x: 0,
                y: headerH,
                w: api.frameWidth,
                h: api.frameHeight
            }
        }, function(ret, err) {
            if (ret) {
                if (ret.eventType == 'success' && ret.content != '') {
                    // 掃碼成功執行函數操作傳值
                    fnOpenCouple(ret.content);
                    return;
                }
                if (ret.eventType == 'cameraError') {
                    api.toast({
                        msg: '請開啓app訪問手機攝像頭權限',
                        duration: 2000,
                        location: 'bottom'
                    });
                    setTimeout(function() {
                        // 關閉掃碼器  關閉掃碼界面
                        back();
                    }, 300);
                    return;
                }
                if (ret.eventType == 'albumError') {
                    api.toast({
                        msg: '請開啓app訪問手機相冊權限',
                        duration: 2000,
                        location: 'bottom'
                    });
                    setTimeout(function() {
                        back();
                    }, 300);
                    return;
                }
                if (ret.eventType == 'fail') {
                    api.toast({
                        msg: '掃碼失敗,請從新掃碼',
                        duration: 2000,
                        location: 'bottom'
                    });
                    setTimeout(function() {
                        back();
                    }, 300);
                    return;
                }
            } else {
                api.toast({
                    msg: '掃碼錯誤請稍後再試',
                    duration: 2000,
                    location: 'bottom'
                });
                setTimeout(function() {
                    back();
                }, 300);
            }
        });
        setTimeout(function() {
            // 打開掃碼動畫frm頁面
            api.openFrame({
                name: 'add_frm',
                url: './add_frm.html',
                rect: {
                    marginTop: headerH,
                    marginLeft: 0,
                    marginRight: 0,
                    marginBottom: 0
                },
                bgColor: 'rgba(0,0,0,0)',
            });
        }, 300);
    }

    //返回
    function back() {
        // 關閉win頁面
        api.closeWin();
        // 關閉掃碼模塊
        FNScanner.closeView();
    }

    //打開最後掃碼得出的數值
    function fnOpenCouple(content) {
        console.warn(content);
        back(); //建議打開下一頁我這塊只是爲了方便直接調用返回按鈕   掃碼成功之後必須關閉掃碼模塊  不然會出現多次掃碼情況
    }

    var isSOff = true;
    // 打開閃光燈
    function fnOpenLamp() {
        if (isSOff) {
            FNScanner.switchLight({
                status: 'on'
            });
            isSOff = false;
        } else {
            FNScanner.switchLight({
                status: 'off'
            });
            isSOff = true;
        }
    }
複製代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章