// 包路径

const package_NdefRecord = 'android.nfc.NdefRecord';

const package_NdefMessage = 'android.nfc.NdefMessage';

const package_TECH_DISCOVERED = 'android.nfc.action.TECH_DISCOVERED';

const package_Intent = 'android.content.Intent';

const package_Activity = 'android.app.Activity';

const package_PendingIntent = 'android.app.PendingIntent';

const package_IntentFilter = 'android.content.IntentFilter';

const package_NfcAdapter = 'android.nfc.NfcAdapter';

const package_Ndef = 'android.nfc.tech.Ndef';

const package_NdefFormatable = 'android.nfc.tech.NdefFormatable';

const package_Parcelable = 'android.os.Parcelable';

const package_String = 'java.lang.String';

let NfcAdapter;

let NdefRecord;

let NdefMessage;

let readyWriteData = false;

let readyRead = false;

let noNFC = false;

let techListsArray = [

["android.nfc.tech.IsoDep"],

["android.nfc.tech.NfcA"],

["android.nfc.tech.NfcB"],

["android.nfc.tech.NfcF"],

["android.nfc.tech.Ndef"],

["android.nfc.tech.NfcV"],

["android.nfc.tech.NdefFormatable"],

["android.nfc.tech.MifareClassic"],

["android.nfc.tech.MifareUltralight"]

];

// 要写入的数据

let text = '{id:123,name:nfc,stie:cssmini.com}';

let readResult = '';

export default {

listenNFCStatus: function() {

let that = this;

try {

let main = plus.android.runtimeMainActivity();

let Intent = plus.android.importClass('android.content.Intent');

let Activity = plus.android.importClass('android.app.Activity');

let PendingIntent = plus.android.importClass('android.app.PendingIntent');

let IntentFilter = plus.android.importClass('android.content.IntentFilter');

NfcAdapter = plus.android.importClass('android.nfc.NfcAdapter');

let nfcAdapter = NfcAdapter.getDefaultAdapter(main);

if (nfcAdapter == null) {

uni.showToast({

title: '设备不支持NFC!',

icon: 'none'

})

noNFC = true;

return;

}

if (!nfcAdapter.isEnabled()) {

uni.showToast({

title: '请在系统设置中先启用NFC功能!',

icon: 'none'

});

noNFC = true;

return;

} else {

noNFC = false;

}

let intent = new Intent(main, main.getClass());

intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

let pendingIntent = PendingIntent.getActivity(main, 0, intent, 0);

let ndef = new IntentFilter("android.nfc.action.TECH_DISCOVERED");

ndef.addDataType("*/*");

let intentFiltersArray = [ndef];

plus.globalEvent.addEventListener('newintent', function() {

console.log('newintent running');

// 监听 NFC

setTimeout(that.nfcRuning(), 1000);

});

plus.globalEvent.addEventListener('pause', function(e) {

console.log('pause running');

if (nfcAdapter) {

//关闭前台调度系统

//恢复默认状态

nfcAdapter.disableForegroundDispatch(main);

}

});

plus.globalEvent.addEventListener('resume', function(e) {

console.log('resume running');

if (nfcAdapter) {

//开启前台调度系统

nfcAdapter.enableForegroundDispatch(main, pendingIntent, intentFiltersArray, techListsArray);

}

});

nfcAdapter.enableForegroundDispatch(main, pendingIntent, intentFiltersArray, techListsArray);

} catch (e) {

console.error(e);

}

},

nfcRuning: function() {

NdefRecord = plus.android.importClass("android.nfc.NdefRecord");

NdefMessage = plus.android.importClass("android.nfc.NdefMessage");

let main = plus.android.runtimeMainActivity();

let intent = main.getIntent();

let that = this;

console.log("action type:" + intent.getAction());

if (package_TECH_DISCOVERED == intent.getAction()) {

console.log("readyWriteData=" + readyWriteData + " readyRead=" + readyRead)

if (readyWriteData) {

that.write(intent);

readyWriteData = false;

} else if (readyRead) {

that.read(intent);

readyRead = false;

}

}

},

write(intent) {

try {

toast('请勿移开标签 正在写入...');

console.log("text=" + text);

let textBytes = plus.android.invoke(text, "getBytes");

// image/jpeg text/plain

let textRecord = new NdefRecord(NdefRecord.TNF_MIME_MEDIA,

plus.android.invoke("text/plain", "getBytes"),

plus.android.invoke("", "getBytes"), textBytes);

let message = new NdefMessage([textRecord]);

let Ndef = plus.android.importClass('android.nfc.tech.Ndef');

let NdefFormatable = plus.android.importClass('android.nfc.tech.NdefFormatable');

let tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

let ndef = Ndef.get(tag);

if (ndef != null) {

// 待写入的数据长度

let size = message.toByteArray().length;

ndef.connect();

if (!ndef.isWritable()) {

toast('tag不允许写入!');

return;

}

if (ndef.getMaxSize() < size) {

toast('文件大小超出容量!');

return;

}

ndef.writeNdefMessage(message);

toast('写入数据成功!');

return;

} else {

let format = NdefFormatable.get(tag);

if (format != null) {

try {

format.connect();

format.format(message);

toast('格式化tag并且写入message');

return;

} catch (e) {

toast('格式化tag失败.');

return;

}

} else {

toast('Tag不支持NDEF');

return;

}

}

} catch (e) {

toast('写入失败');

console.log("error=" + e);

}

},

read(intent) {

this.getData(intent);

},

byteArrayToHexString: function(inarray) { // converts byte arrays to string

let i, j, inn;

let hex = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"];

let out = "";

for (j = 0; j < inarray.length; ++j) {

if(inarray[j]==0) continue;

inn = inarray[j] & 0xff;

i = (inn >>> 4) & 0x0f;

out += hex[i];

i = inn & 0x0f;

out += hex[i];

}

return out;

},

writeData: function() {

if (noNFC) {

toast('请检查设备是否支持并开启 NFC 功能!');

return;

}

// 监听事件,触发条件

readyWriteData = true;

toast('请将NFC标签靠近!');

},

readData: function() {

if (noNFC) {

toast('请检查设备是否支持并开启 NFC 功能!');

return;

}

// 监听事件,触发条件

readyRead = true;

toast('请将NFC标签靠近!');

},

getData: function(intent) {

var sector = 1;

var tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

let mc = plus.android.importClass('android.nfc.tech.MifareClassic');

let mfc = mc.get(tag);

console.log('mfc', mfc)

mfc.connect();

var cmdBytes = [0x6A, 0x69, 0x61, 0x6A, 0x75, 0x6E]

console.log('mfc', cmdBytes)

var auth = mfc.authenticateSectorWithKeyA(sector, cmdBytes)

console.log('auth', auth);

if (!auth) return;

try {

var tmpRet,result;

for (var i = 0; i < 3; i++) {

tmpRet = mfc.readBlock(sector * 4 + i);

result+=this.hexCharCodeToStr(this.byteArrayToHexString(tmpRet))

}

console.log('result',result);

} catch (e) {

this.ICERROR = e.message;

console.error(e);

} finally {

mfc.close();

}

},

//Key处理函数

HexStringToByteArray: function(instr) {

var hexA = new Array();

var pos = 0;

var len = instr.length / 2;

for (var i = 0; i < len; i++) {

var s = instr.substr(pos, 2);

var v = parseInt(s, 16);

if (v >= 128)

v = v - 256;

hexA.push(v);

pos += 2;

}

return hexA;

},

hexCharCodeToStr: function(hexCharCodeStr) {

var trimedStr = hexCharCodeStr.trim();

var rawStr =

trimedStr.substr(0, 2).toLowerCase() === "0x" ?

trimedStr.substr(2) :

trimedStr;

var len = rawStr.length;

if (len % 2 !== 0) {

alert("Illegal Format ASCII Code!");

return "";

}

var curCharCode;

var resultStr = [];

for (var i = 0; i < len; i = i + 2) {

curCharCode = parseInt(rawStr.substr(i, 2), 16); // ASCII Code Value

resultStr.push(String.fromCharCode(curCharCode));

}

return resultStr.join("");

}

}

function toast(content) {

uni.showToast({

title: content,

icon: 'none'

})

}

android nfc扇区加密,nfc读取加密扇区相关推荐

  1. android nfc扇区加密,android NFC MifareClassic 读IC卡加密扇区方法

    近段时间在做android下NFC的M1卡的加密扇区的读取,参考了Android_磊子的操作基础内容,但是涉及到MifareClassic类操作验证未能找到相关资料,后来查看了MifareClassi ...

  2. android nfc扇区加密,uniapp安卓NFC MifareClassic读IC卡加密扇区方法

    近段时间在做android下NFC的M1卡的加密扇区的读取,但是涉及到MifareClassic类操作验证未能找到相关资料,后来查看了MifareClassic类的源代码和基于android原生案例, ...

  3. android手机扇区数据读写,android NFC MifareClassic 读IC卡加密扇区方法

    近段时间在做android下NFC的M1卡的加密扇区的读取,参考了Android_磊子的操作基础内容,但是涉及到MifareClassic类操作验证未能找到相关资料,后来查看了MifareClassi ...

  4. matlab画扇区,NFCDemo NFC读写测试 ,自动读取每个扇区 块的值 matlab 238万源代码下载- www.pudn.com...

    文件名称: NFCDemo下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 66 KB 上传时间: 2013-12-13 下载次数: 24 提 供 者: wuze ...

  5. NFC RFID卡用于读取与iPhone或Android

    NFC RFID卡用于读取与iPhone或Android 作为(近场通信)的NFC RFID卡被认为是最快速,最安全的方式在NFC支付,每日的RFID发布了最新的NFC RFID卡-02,以帮助支付过 ...

  6. 加密卡华为怎么模拟_华为手机怎么复制加密NFC门卡?

    原标题:华为手机怎么复制加密NFC门卡? "极客谈科技",全新视角.全新思路,伴您遨游神奇的科技世界. 虽然NFC已经成为了中高端手机的标配之一,但是很多人对于什么是NFC,NFC ...

  7. NFC手机手环脱机模拟加密门禁卡

    目标:将门禁卡.考勤卡.会员卡.停车卡.电梯卡等等各种卡模拟进手机里,模拟后可用手机代替刷卡,无需root,不用电脑 背景介绍: 1.前言   目前,IC卡已被广泛应用于身份识别.金融消费.安全认证等 ...

  8. Android硬件开发之——NFC技术

    前言 本文主要讲述Android中的NFC技术,分以下几个方面展开: Android对NFC技术的支持 NFC标签 NDEF和非NDEF数据 NFC的三重过滤机制 编写NFC程序的步骤 NFC技术 A ...

  9. 高通 NFC开发基础知识 (未完待续)(目前是主要择录,参考 邓凡平:深入理解Android:WiFi模块 NFC和GPS卷)

    NFC开发相关 NFC概述 NFC(Near Field Communication,近场通信)也叫做近距离无线通信技术.该技术最早由Philips和Sony两家公司于2002年年末联合推出.2004 ...

  10. Android安全加密:对称加密

    Android安全加密专题文章索引 Android安全加密:对称加密 Android安全加密:非对称加密 Android安全加密:消息摘要Message Digest Android安全加密:数字签名 ...

最新文章

  1. 计算机应用基础知识点.pdf,《计算机应用基础》复习知识点.pdf
  2. python 可变参数 关键字参数_Python之 可变参数和关键字参数
  3. iOS使用UIBezierPath实现ProgressView
  4. 关于 SAP Spartacus 支持不同的环境配置部署到 SAP Commerce Cloud 上的讨论
  5. vue --- 使用vue在html上显示当前时间
  6. 面试题4,打印出100-999所有的“水仙花数”。
  7. VMware ESXi 环境备份与还原处理案例
  8. 动态创建Sql Server数据库相关(全)
  9. cube一站式云原生机器学习平台-加速分布式任务的运行效率
  10. [HDU 1003] Max Sum
  11. Springboot毕设项目餐厅后勤管理系统cxjgl(java+VUE+Mybatis+Maven+Mysql)
  12. 装配图中齿轮的画法_机械制图之装配图
  13. java 立体几何体中心点_高中数学知识点大全,立体几何核心考点及解题技巧
  14. android移动控件位置
  15. 21 C++ 长度单位转换
  16. “海外围猎场”里的中国游戏玩家
  17. Confluence 7 删除页面和子页面
  18. 怎么让input输入框最右侧一直默认有百分号
  19. H3c Smart-link 实验
  20. 征信报告 加密文档_PDF文档如何加密?看完这个方法你就知道了

热门文章

  1. python下载版本区别
  2. React之生命周期-forceUpdate
  3. JavaScript:生成器函数
  4. 用python解“厘米换算英尺英寸”问题
  5. INA219 datasheet详解 INA219使用方法
  6. 使用Androidpn实现Android消息推送
  7. POI读取excel百万级-SAX方式解析
  8. 微信储存卡已拔出,如何解决
  9. 浙江数字贸易先行示范区建设方案发布,贡献数字贸易“浙江方案”
  10. java 调用 mahout_使用 Mahout 实现内容分类