- 发布:2015-06-21 03:54
- 更新:2019-12-19 16:03
- 阅读:63537
最佳回复
最新更新适配见:http://ask.dcloud.net.cn/question/12942
================================
大家先尝鲜一下,我仅测试读公交卡了。数据可以出来,具体哪些数据有用,需要专业开发者补充完善分享。在此先谢过了。
function test_nfc(){
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');
var NfcAdapter = plus.android.importClass('android.nfc.NfcAdapter');
var nfcAdapter = NfcAdapter.getDefaultAdapter(main);
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() {
console.log('newintent');
setTimeout(handle_nfc_data,1000);
}, false);
document.addEventListener("pause", function(e) {
if (nfcAdapter) {
nfcAdapter.disableForegroundDispatch(main);
console.log('pause');
}
}, false);
document.addEventListener("resume", function(e) {
if (nfcAdapter) {
console.log('resume');
nfcAdapter.enableForegroundDispatch(main, pendingIntent, intentFiltersArray, techListsArray);
}
}, false);
nfcAdapter.enableForegroundDispatch(main, pendingIntent, intentFiltersArray, techListsArray);
}
function handle_nfc_data(){
var main = plus.android.runtimeMainActivity();
var runtimeIntent = main.getIntent();
var b = runtimeIntent.getExtras();
plus.android.importClass(b);
var set = b.keySet();
plus.android.importClass(set);
var sb;
var i = set.iterator();
plus.android.importClass(i);
var hasNest = i.hasNext();
var NfcA = plus.android.importClass("android.nfc.tech.NfcA");
var IsoDep = plus.android.importClass("android.nfc.tech.IsoDep");
var Tag = plus.android.importClass("android.nfc.Tag");
while (hasNest) {
var key = i.next();
var v = b.get(key);
if(v instanceof NfcA){
var atqa = v.getAtqa();
var sak = v.getSak();
var tag = g.getTag();
plus.android.importClass(tag);
var techList = tag.getTechList();
console.log('NfcA Atqa=' + atqa + ";Sak=" + sak + ";techList=" + techList);
}else if(v instanceof IsoDep){
var tag = g.getTag();
plus.android.importClass(tag);
var techList = tag.getTechList();
console.log('IsoDep techList=' + techList);
}else if(v instanceof Tag){
var tag = v;
var techList = tag.getTechList();
console.log('Tag techList=' + techList);
}
console.log(key + ';v=' + v);
sb = key + "=" + v + "\n";
hasNest = i.hasNext();
console.log('hasNest=' + hasNest);
}
}
@DCloud_Android_磊子 用Nexus5调试下,看看哪里出了问题。
@DCloud_App_Array 关注此问题。
-
黄智勇 (作者)
我怀疑是系统架构内部报错,因为是扫描NFC小标签的时候,才报错,并且没有进入newintent事件里面来. 似的代码我用Android原生的java代码实现一遍,是成功的,
2015-07-06 13:59
黄智勇 (作者)
document.addEventListener("plusready",function(){
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');
var NfcAdapter = plus.android.importClass('android.nfc.NfcAdapter');
var nfcAdapter = NfcAdapter.getDefaultAdapter(main);
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() {
var args = plus.runtime["arguments"];
alert(args);
}, 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);
},false);
这样会报错,报错信息是 Uncaught SyntaxError: Unexpected token .
发现联调模式下nfc权限就算勾选也不起作用,必须打包后才行,所以没有办法调试。我打包后在我的手机上读卡会报错。
这两个异常怎么解决?怎么读取MifareClassic和nfcA的数据。
-
自定义密钥
var key_A = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00];
直接使用默认方法中的值,不要用他的默认方法2019-08-22 12:16
-
我都读可以了,写数据时候,显示
Uncaught Attempt to invoke virtual method 'java.lang.Class java.lang.reflect.Method.getReturnType()' on a null object reference;at android.nfc.tech.MifareClassic.writeBlock at wrnfc.html2019-08-22 12:18
请教各位大神我是在uniapp中使用
plus.globalEvent.addEventListener("newintent",
function() {
uni.showToast({
title: '监听到了'
})
console.log('newintent');
setTimeout(this.handle_nfc_data1, 1000);
}, false);
为什么都没有成功进入过
黄智勇 (作者)
多谢! 我测试一下读取文本. 给dcloud点赞!
2015-07-18 04:49
f***@foxmail.com
该代码手机连电脑测试,刷nfc标签能够正常,但是打包安装,程序启动后,刷nfc标签程序闪退,是什么原因呢?
2016-05-03 09:16
Android_磊子
回复 f***@foxmail.com:是何种打包方式,使用HBuilder基座apk测试会有问题吗?
2016-05-03 13:13
王米仓
你好,我是在uniapp中用plus.globalEvent.addEventListener监听newintent事件为什么都没有成功触发过该事件求指点
2019-08-27 22:54