1***@qq.com
1***@qq.com
  • 发布:2017-12-22 12:27
  • 更新:2021-03-16 10:31
  • 阅读:1880

NFC读卡rawmsgs 为NULL

分类:5+ SDK
NFC

var NfcAdapter;
var NdefRecord;
var NdefMessage;
function listenNFCStatus() {
try{
var main = plus.android.runtimeMainActivity();
var Intent = plus.android.importClass('android.content.Intent');
var Activity = plus.android.importClass('android.app.Activity');
var PendingIntent = plus.android.importClass('android.app.PendingIntent');
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
NfcAdapter = plus.android.importClass('android.nfc.NfcAdapter');
var nfcAdapter = NfcAdapter.getDefaultAdapter(main);

                if(nfcAdapter == null){  
                    alert("设备不支持NFC!");  
                    return;  
                }  
                if (!nfcAdapter.isEnabled()) {  

                    alert("请在系统设置中先启用NFC功能!");  

                    return;  

                }  

                var intent = new Intent(main, main.getClass());  
                intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);  
                var pendingIntent = PendingIntent.getActivity(main, 0, intent, 0);  
                var ndef = new IntentFilter("android.nfc.action.TECH_DISCOVERED");  
                ndef.addDataType("*/*");  
                var intentFiltersArray = [ndef];  
                var techListsArray = [  
                    ["android.nfc.tech.IsoDep"],  
                    ["android.nfc.tech.NfcA"],  
                    ["android.nfc.tech.NfcB"],  
                    ["android.nfc.tech.NfcF"],  
                    ["android.nfc.tech.Nfcf"],  
                    ["android.nfc.tech.NfcV"],  
                    ["android.nfc.tech.NdefFormatable"],  
                    ["android.nfc.tech.MifareClassi"],  
                    ["android.nfc.tech.MifareUltralight"]  
                ];  
                document.addEventListener("newintent",  
                    function() {  
                        setTimeout(handle_nfc_data1, 1000);  
                    }, false);  
                document.addEventListener("pause", function(e) {  
                    if (nfcAdapter) {  
                        nfcAdapter.disableForegroundDispatch(main);  
                    }  
                }, false);  
                document.addEventListener("resume", function(e) {  
                    if (nfcAdapter) {  
                        nfcAdapter.enableForegroundDispatch(main, pendingIntent, intentFiltersArray, techListsArray);  
                    }  
                }, false);  
                nfcAdapter.enableForegroundDispatch(main, pendingIntent, intentFiltersArray, techListsArray);  
            }catch(e){  
                console.error(e);  
            }  
        }  

        function handle_nfc_data1()  
        {  
            NdefRecord = plus.android.importClass("android.nfc.NdefRecord");  
            NdefMessage = plus.android.importClass("android.nfc.NdefMessage");  
            var main = plus.android.runtimeMainActivity();  
            var intent = main.getIntent();  
            if("android.nfc.action.TECH_DISCOVERED" == intent.getAction()){  
                if(readyWriteData){  
                    __write(intent);  
                    readyWriteData = false;  
                }else if(readyRead){  
                    __read(intent);  
                    readyRead = false;  
                }  
            }  
        }  
        function showToast(msg){  
            plus.nativeUI.toast(msg);  
        }  

        function __write(intent){  
            try{  
                waiting.setTitle('请勿移开标签\n正在写入...');  
                var text = document.getElementById('text').value;  
                console.log("text=" + text);  
                var textBytes = plus.android.invoke(text,"getBytes");  
                // image/jpeg text/plain  
                var textRecord = new NdefRecord(NdefRecord.TNF_MIME_MEDIA,  
                        plus.android.invoke("text/plain","getBytes"), plus.android.invoke("","getBytes"), textBytes);  
                var message = new NdefMessage([textRecord]);  
                var Ndef = plus.android.importClass('android.nfc.tech.Ndef');  
                var NdefFormatable = plus.android.importClass('android.nfc.tech.NdefFormatable');  
                var tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);  
                var ndef = Ndef.get(tag);  
                if (ndef != null) {  
                    var size = message.toByteArray().length;  
                    console.log("size=" + size);  
                    ndef.connect();  
                    if (!ndef.isWritable()) {  
                        showToast("tag不允许写入");  
                        waiting.close();  
                        return ;  
                    }  
                    if (ndef.getMaxSize() < size) {  
                        showToast("文件大小超出容量");  
                        waiting.close();  
                        return ;  
                    }  

                    ndef.writeNdefMessage(message);  
                    waiting.close();  
                    showToast("写入数据成功.");  
                    return ;  
                } else {  
                    var format = NdefFormatable.get(tag);  
                    if (format != null) {  
                        try {  
                            format.connect();  
                            format.format(message);  
                            showToast("格式化tag并且写入message");  
                            waiting.close();  
                            return ;  
                        } catch (e) {  
                            showToast("格式化tag失败.");  
                            waiting.close();  
                            return ;  
                        }  
                    } else {  
                        showToast("Tag不支持NDEF");  
                        waiting.close();  
                        return ;  
                    }  
                }  
            }catch(e){  
                waiting.close();  
                alert('写入失败');  
            }  

        }  

        function __read(intent){  
            waiting.setTitle('请勿移开标签\n正在读取数据...');  
            try{  
                var Parcelable = plus.android.importClass("android.os.Parcelable");  
               var rawmsgs = intent.getParcelableArrayExtra("android.nfc.extra.NDEF_MESSAGES");  
                records = rawmsgs[0].getRecords();  
                var result = records[0].getPayload();  
                var s = plus.android.newObject("java.lang.String",result);  
                plus.ui.toast(s);  
                document.getElementById('content1').textContent = s;  
            }catch(e){alert(e)}  
            waiting.close();  
        }  
        document.addEventListener('plusready',listenNFCStatus,false);  

        var waiting ;  
        var readyWriteData = false;  
        var readyRead = false;  
        function writeData(){  
            var textEle = document.getElementById('text');  
            if(!textEle.value){  
                alert('请输入要写入的内容');  
                return;  
            }  
            readyWriteData = true;  
            waiting = plus.nativeUI.showWaiting("请将NFC标签靠近!");  
        }  
        function readData(){  
            readyRead = true;  
            waiting = plus.nativeUI.showWaiting("请将NFC标签靠近!");  
        }  

   var Parcelable = plus.android.importClass("android.os.Parcelable");  
   var rawmsgs = intent.getParcelableArrayExtra("android.nfc.extra.NDEF_MESSAGES");  
   records = rawmsgs[0].getRecords();  

我这里运行起来,报rawmsgs 为null的异常,我需要读取自己写进卡里面的数据

2017-12-22 12:27 负责人:无 分享
已邀请:
加勒比海带

加勒比海带 - 菜前端

大佬这个问题解决了吗

该问题目前已经被锁定, 无法添加新回复