Android NFC 开发一个门禁app app 有没有什么资料和相关设计思路

需求发布后1小时内收到服务商响应每个需求平均有10个服务商参与95%以上的需求得到了圆满解决所有需求不向雇主收取任何佣金双11电商狂欢 爆款服务超乎你想像
android底层NFC驱动及控制接口 源码
有相似问题想解决?专业顾问来帮助您
匹配服务商
选择服务商,签单
服务商工作
验收并付款
参与报价,开始赚钱
提交你的报价和方案
中标后交付作品
获得任务赏金
极速:10分钟急速响应
高品质:精选服务商提供服务
放心:不满意可退款
APP成品套餐
APP成品源码套餐
交易成功的需求
APP定制开发相关需求
关注猪八戒微信匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。中国领先的IT技术网站
51CTO旗下网站
Android NFC开发实例:学生卡数据读取
NFC功能现在越来越通用了,Google也为我们准备了详细的NFC开发文档,本文介绍了如何用Android NFC功能读取学生卡,获取里面的信息。
作者:佚名来源:cnblogs| 13:35
使用硬件:Google Nexus S,北京大学学生卡。(ps:笔者本想使用公交一卡通进行测试,发现手机不能正确识别)
手机操作系统:Android ICS 4.04。
开发时,笔者从Google Play Store上下载了NFC TagInfo软件进行对比学习。所以我们可以使用任意一张能被TagInfo软件正确识别的卡做测试。
在Android NFC 应用中,Android手机通常是作为通信中的发起者,也就是作为各种NFC卡的读写器。Android对NFC的支持主要在 android.nfc 和android.nfc.tech 两个包中。
android.nfc 包中主要类如下:
NfcManager 可以用来管理Android设备中指出的所有NFCAdapter,但由于大部分Android设备只支持一个NFC Adapter,所以一般直接调用getDefaultAapater来获取手机中的Adapter。
NfcAdapter 相当于一个NFC适配器,类似于电脑装了网络适配器才能上网,手机装了NfcAdapter才能发起NFC通信。
NDEF: NFC Data Exchange Format,即NFC数据交换格式。
NdefMessage 和NdefRecord NDEF 为NFC forum 定义的数据格式。
Tag 代表一个被动式Tag对象,可以代表一个标签,卡片等。当Android设备检测到一个Tag时,会创建一个Tag对象,将其放在Intent对象,然后发送到相应的Activity。
android.nfc.tech 中则定义了可以对Tag进行的读写操作的类,这些类按照其使用的技术类型可以分成不同的类如:NfcA, NfcB, NfcF,以及MifareClassic 等。其中MifareClassic比较常见。
在本次实例中,笔者使用北京大学学生卡进行数据读取测试,学生卡的TAG类型为MifareClassic。
AndroidManifest.xml:
&xmlns:android=&/apk/res/android&&&&&&&&package=&org.reno&&&&&&&&android:versionCode=&1&&&&&&&&android:versionName=&1.0&&&&&&&&&&android:name=&android.permission.NFC&&&&&&&&&&android:minSdkVersion=&14&&&&&&&&&&android:name=&android.hardware.nfc&&android:required=&true&&&&&&&&&&&&&&&&&&&&android:icon=&@drawable/ic_launcher&&&&&&&&&&&&android:label=&@string/app_name&&&&&&&&&&&&&&&&&&&&&&&&&&&&android:name=&org.reno.Beam&&&&&&&&&&&&&&&&android:label=&@string/app_name&&&&&&&&&&&&&&&&android:launchMode=&singleTop&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&android:name=&android.intent.action.MAIN&&&&&&&&&&&&&&&&&&&&&&&&&android:name=&android.intent.category.LAUNCHER&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&android:name=&android.nfc.action.TECH_DISCOVERED&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&android:name=&android.nfc.action.TECH_DISCOVERED&&&&&&&&&&&&&&&&&&&&android:resource=&@xml/nfc_tech_filter&&&&&&&&&&&&&&&&&&&&&&&&&&
res/xml/nfc_tech_filter.xml:
&xmlns:xliff=&urn:oasis:names:tc:xliff:document:1.2&&&&&&&&&&&&&&android.nfc.tech.MifareClassic&&&&&&&
当手机开启了NFC,并且检测到一个TAG后,TAG分发系统会自动创建一个封装了NFC
TAG信息的intent。如果多于一个应用程序能够处理这个intent的话,那么手机就会弹出一个框,让用户选择处理该TAG的Activity。 TAG分发系统定义了3中intent。按优先级从高到低排列为:
NDEF_DISCOVERED, TECH_DISCOVERED, TAG_DISCOVERED
当Android设备检测到有NFC Tag靠近时,会根据Action申明的顺序给对应的Activity 发送含NFC消息的 Intent。
此处我们使用的intent-filter的Action类型为TECH_DISCOVERED从而可以处理所有类型为ACTION_TECH_DISCOVERED并且使用的技术为nfc_tech_filter.xml文件中定义的类型的TAG。
详情可查看说明。下图为当手机检测到一个TAG时,启用Activity的匹配过程。
res/layout/main.xml:
&version=&1.0&&encoding=&utf-8&&&&&xmlns:android=&/apk/res/android&&&&&&&&android:layout_width=&fill_parent&&&&&&&&android:layout_height=&fill_parent&&&&&&&&android:orientation=&vertical&&&&&&&&&&&&&&&&&&&&&&&android:id=&@+id/scrollView&&&&&&&&&&&&android:layout_width=&fill_parent&&&&&&&&&&&&android:layout_height=&fill_parent&&&&&&&&&&&&android:background=&@android:drawable/edit_text&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&android:id=&@+id/promt&&&&&&&&&&&&&&&&android:layout_width=&fill_parent&&&&&&&&&&&&&&&&android:layout_height=&wrap_content&&&&&&&&&&&&&&&&android:scrollbars=&vertical&&&&&&&&&&&&&&&&android:singleLine=&false&&&&&&&&&&&&&&&&android:text=&@string/info&&&&&&&&&&&&&&&&&&
定义了Activity的布局:只有一个带有滚动条的TextView用于显示从TAG中读取的信息。
res/values/strings.xml:
&version=&1.0&&encoding=&utf-8&&&&&&&&&&&&name=&app_name&NFC测试&&&&&&&&name=&info&扫描中。。。&&&&&&
src/org/reno/Beam.java:
package&org.&&&&&&import&android.app.A&&&import&android.content.I&&&import&android.nfc.NfcA&&&import&android.nfc.T&&&import&android.nfc.tech.MifareC&&&import&android.os.B&&&import&android.widget.TextV&&&&&&public&class&Beam&extends&Activity&{&&&&&&&NfcAdapter&nfcA&&&&&&&TextView&&&&&&&&@Override&&&&&&&public&void&onCreate(Bundle&savedInstanceState)&{&&&&&&&&&&&super.onCreate(savedInstanceState);&&&&&&&&&&&setContentView(R.layout.main);&&&&&&&&&&&promt&=&(TextView)&findViewById(R.id.promt);&&&&&&&&&&&&&&&&&&&&nfcAdapter&=&NfcAdapter.getDefaultAdapter(this);&&&&&&&&&&&if&(nfcAdapter&==&null)&{&&&&&&&&&&&&&&&promt.setText(&设备不支持NFC!&);&&&&&&&&&&&&&&&finish();&&&&&&&&&&&&&&&return;&&&&&&&&&&&}&&&&&&&&&&&if&(!nfcAdapter.isEnabled())&{&&&&&&&&&&&&&&&promt.setText(&请在系统设置中先启用NFC功能!&);&&&&&&&&&&&&&&&finish();&&&&&&&&&&&&&&&return;&&&&&&&&&&&}&&&&&&&}&&&&&&&&&&@Override&&&&&&&protected&void&onResume()&{&&&&&&&&&&&super.onResume();&&&&&&&&&&&&&&&&&&&&if&(NfcAdapter.ACTION_TECH_DISCOVERED.equals(getIntent().getAction()))&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&processIntent(getIntent());&&&&&&&&&&&}&&&&&&&}&&&&&&&&&&&&private&String&bytesToHexString(byte[]&src)&{&&&&&&&&&&&StringBuilder&stringBuilder&=&new&StringBuilder(&0x&);&&&&&&&&&&&if&(src&==&null&||&src.length&&=&0)&{&&&&&&&&&&&&&&&return&null;&&&&&&&&&&&}&&&&&&&&&&&char[]&buffer&=&new&char[2];&&&&&&&&&&&for&(int&i&=&0;&i&&&src.&i++)&{&&&&&&&&&&&&&&&buffer[0]&=&Character.forDigit((src[i]&&&&&4)&&&0x0F,&16);&&&&&&&&&&&&&&&buffer[1]&=&Character.forDigit(src[i]&&&0x0F,&16);&&&&&&&&&&&&&&&System.out.println(buffer);&&&&&&&&&&&&&&&stringBuilder.append(buffer);&&&&&&&&&&&}&&&&&&&&&&&return&stringBuilder.toString();&&&&&&&}&&&&&&&&&&&&&&&&&&&private&void&processIntent(Intent&intent)&{&&&&&&&&&&&&&&&&&&&&Tag&tagFromIntent&=&intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);&&&&&&&&&&&for&(String&tech&:&tagFromIntent.getTechList())&{&&&&&&&&&&&&&&&System.out.println(tech);&&&&&&&&&&&}&&&&&&&&&&&boolean&auth&=&false;&&&&&&&&&&&&&&&&&&&&MifareClassic&mfc&=&MifareClassic.get(tagFromIntent);&&&&&&&&&&&try&{&&&&&&&&&&&&&&&String&metaInfo&=&&&;&&&&&&&&&&&&&&&&&&&&&&&&&&&&mfc.connect();&&&&&&&&&&&&&&&int&type&=&mfc.getType();&&&&&&&&&&&&&int&sectorCount&=&mfc.getSectorCount();&&&&&&&&&&&&&String&typeS&=&&&;&&&&&&&&&&&&&&&switch&(type)&{&&&&&&&&&&&&&&&case&MifareClassic.TYPE_CLASSIC:&&&&&&&&&&&&&&&&&&&typeS&=&&TYPE_CLASSIC&;&&&&&&&&&&&&&&&&&&&break;&&&&&&&&&&&&&&&case&MifareClassic.TYPE_PLUS:&&&&&&&&&&&&&&&&&&&typeS&=&&TYPE_PLUS&;&&&&&&&&&&&&&&&&&&&break;&&&&&&&&&&&&&&&case&MifareClassic.TYPE_PRO:&&&&&&&&&&&&&&&&&&&typeS&=&&TYPE_PRO&;&&&&&&&&&&&&&&&&&&&break;&&&&&&&&&&&&&&&case&MifareClassic.TYPE_UNKNOWN:&&&&&&&&&&&&&&&&&&&typeS&=&&TYPE_UNKNOWN&;&&&&&&&&&&&&&&&&&&&break;&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&metaInfo&+=&&卡片类型:&&+&typeS&+&&\n共&&+&sectorCount&+&&个扇区\n共&&&&&&&&&&&&&&&&&&&&&&&&+&mfc.getBlockCount()&+&&个块\n存储空间:&&&+&mfc.getSize()&+&&B\n&;&&&&&&&&&&&&&&&for&(int&j&=&0;&j&&&sectorC&j++)&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&auth&=&mfc.authenticateSectorWithKeyA(j,&&&&&&&&&&&&&&&&&&&&&&&&&&&MifareClassic.KEY_DEFAULT);&&&&&&&&&&&&&&&&&&&int&bC&&&&&&&&&&&&&&&&&&&int&bI&&&&&&&&&&&&&&&&&&&if&(auth)&{&&&&&&&&&&&&&&&&&&&&&&&metaInfo&+=&&Sector&&&+&j&+&&:验证成功\n&;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&bCount&=&mfc.getBlockCountInSector(j);&&&&&&&&&&&&&&&&&&&&&&&bIndex&=&mfc.sectorToBlock(j);&&&&&&&&&&&&&&&&&&&&&&&for&(int&i&=&0;&i&&&bC&i++)&{&&&&&&&&&&&&&&&&&&&&&&&&&&&byte[]&data&=&mfc.readBlock(bIndex);&&&&&&&&&&&&&&&&&&&&&&&&&&&metaInfo&+=&&Block&&&+&bIndex&+&&&:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&+&bytesToHexString(data)&+&&\n&;&&&&&&&&&&&&&&&&&&&&&&&&&&&bIndex++;&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&}&else&{&&&&&&&&&&&&&&&&&&&&&&&metaInfo&+=&&Sector&&&+&j&+&&:验证失败\n&;&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&promt.setText(metaInfo);&&&&&&&&&&&}&catch&(Exception&e)&{&&&&&&&&&&&&&&&e.printStackTrace();&&&&&&&&&&&}&&&&&&&}&&&}&&&
关于MifareClassic卡的背景介绍:数据分为16个区(Sector) ,每个区有4个块(Block) ,每个块可以存放16字节的数据。
每个区最后一个块称为Trailer ,主要用来存放读写该区Block数据的Key ,可以有A,B两个Key,每个Key 长度为6个字节,缺省的Key值一般为全FF或是0. 由 MifareClassic.KEY_DEFAULT 定义。
因此读写Mifare Tag 首先需要有正确的Key值(起到保护的作用),如果鉴权成功,然后才可以读写该区数据。
执行效果:
【编辑推荐】【责任编辑: TEL:(010)】
大家都在看猜你喜欢
热点聚焦热点热点热点
24H热文一周话题本月最赞
讲师:159471人学习过
讲师:251739人学习过
讲师:145456人学习过
精选博文论坛热帖下载排行
本书深刻揭示了Spring的技术内幕,对IoC、AOP、事务管理等根基性的技术进行了深度的挖掘。读者阅读本书后,不但可以熟练使用Spring的各项功...
订阅51CTO邮刊知道吗?NFC功能在Android上原来这么强大!|nfc|android手机|android_新浪科技_新浪网
知道吗?NFC功能在Android上原来这么强大!
  本文来自爱范儿  
  上个月 Apple Pay 入华的消息让许多人为之沸腾。许多人第一次接触 Apple Pay 与云闪付概念的人们大多都有如下反应:
1.无法绑卡;
2.好方便啊;
3.为什么歧视 Android!
  事实上,早在几年前银联推行闪付与云闪付等非接触式支付方案的时候,云闪付就针对支持 NFC 技术的 Android 手机(那时候的 iPhone 还没有 NFC 这一说呢)。所以实际上,在 Android 上可以‘装 ×’的时间要远早于 Apple Pay 推出的时间,Apple Pay 在技术上也兼容云闪付系统。
  而这篇文章要讨论的,便是让各位 Android 党免受 iPhone 用户的歧视,用上与 Apple Pay 同等方便的云闪付功能,以及解锁 NFC 功能的更多高级玩法。
我的 Android 手机有没有 NFC?
  由于银联云闪付是基于 NFC 的支付方案,所以要求设备必须要拥有 NFC 功能。市面上常见的高端机型如小米 3(小米 4 不支持)、三星 Galaxy 系列、华为 Mate、Google Nexus 系列等手机都已搭载 NFC 功能。
  如果你不清楚自己的手机是否拥有 NFC 功能,可以通过以下两个方法查找。
1.进入系统设置,找到‘网络与无线连接’选项并进入,如果支持 NFC,该选项里应该有 NFC(近场通讯)开关。
2.Google 或百度搜索自己的手机型号+NFC 作为关键字进行查找。
怎么玩云闪付?
  由于 Android 上暂时没有类似 Apple Pay 或 Android Pay 这样的支持大陆使用的统一银行卡管理服务,如果需要玩云闪付,就需要下载各家银行不同的客户端。此处以招商银行信用卡为例。
1.下载并安装‘掌上生活’app。
2.在 app 内使用信用卡账户或招行一卡通账户。
3.点击‘卡·生活’菜单,选择‘一闪通’。
4.按照提示开通‘一闪通·云闪付’功能。
  需要注意的是,部分机型的 Android 系统在安装有多个支持‘Tap and Pay’服务的 app 的情况下,会要求设定默认的支付 app,以便在支付 app 未被激活的前提下完成付款。具体的默认支付 app 设定方法是:进入系统设置,找到‘触碰付款’选项,然后选择默认的支付 app。
  如果你是三星手机用户,还可以使用最近推出的 Samsung Pay 功能。Samsung Pay 不仅支持 NFC 支付,还支持看上去很黑科技的‘磁条模拟刷卡’功能。找到手机内的 Samsung Pay app,根据提示就能很轻松地完成卡片添加操作。
  卡添加好之后,就可以出门‘装 ×’啦。只要看见贴有‘银联云闪付’Logo 的商家,都能够支持 Android 设备的云闪付功能,只需要解锁手机并将手机的背面贴近 POS 机,支付就能完成。只是根据这几天 Apple Pay 用户以及我的经历来讲,最大的缺陷并不是设备不支持,而是店员根本不了解什么是云闪付。
Android 的 NFC 还有更多高级玩法…
  不同于 iOS 用户的 NFC 模块只能用于支付,由于 Android 上 NFC 相关 API 是开放的,Android 上也有许多 NFC 新的玩法,这也为 Android 的 NFC 带来许多不同的可能性。
  解锁手机:是的你没有看错,Android 5.0+、带有 Google Play 服务以及 NFC 模块的设备都能够使用 NFC 解锁手机。在系统设置中选择安全,并进入 SmartLock,选择‘信任的设备’并添加一个 NFC 解锁设备。此处的‘NFC 解锁设备’并不仅局限于 NFC 标贴,你的门禁卡、公交卡、饭卡等等都可以作为解锁手机的‘钥匙’。
  查询/充值公交卡:微信与在一年多以前就可以通过 NFC 服务为公交卡进行余额查询和充值。将公交卡贴在手机背面,手机会自动跳转至微信或支付宝,然后执行查询或充值操作。目前支付宝的余额查询功能可以查询全国 各大城市通用标准公交卡中。充值功能根据不同的 app 有不同的政策与支持地区。
  传输文件:这应该是 Android NFC 最为令人津津乐道的功能了。通过基于 NFC 的 Android Beam 功能,两台兼容的 Android 设备可以互相进行数据传输。只需要将欲分享的内容打开,并将两台手机背对背靠好,点击屏幕就能完成分享。
  甚至……还可以自动完成任务。对于高玩来说,Android NFC 可以做到离线版 IFTTT,自动化进行某些操作。通过 Tasker app 以及其他支持 NFC 的自动化 app,用户可以使用 NFC 标贴来作为 task trigger(任务触发器),做到 Wi-Fi 网络切换、快速静音、快速设定闹钟等等操作。
  总之,好好利用 Android NFC 功能,能够给日常生活带来极大的便利。这也是许多玩家喜欢使用 Android 的非常重要的原因,也是 Android 最为有趣的地方之一。
启动速度将更快、照片将更清晰、日程提醒将更易设置。
该机仍保持了全键盘特色,但它的实体键盘是固定的。
出错原因是苹果公司使用了过期的安全证书去验证应用。
大部分用户都使用智能手机拍照,GoPro正在被边缘化。
参考价格3698元
双曲面屏幕
参考价格5688元
参考价格2699元
骁龙820旗舰芯片
超高性价比
造型无革新
参考价格未上市
可更换电池
独立模块设计&>&android nfc开发demo
android nfc开发demo
上传大小:2.09MB
android nfc开发demo。本人在里面写了不少注释,还有经过几天开发,这个demo已经应用公司app。根据这个demo可以写很多版本的简化版。我的csdn博客地址:http://blog.csdn.net/qq_。我在博客中还有nfc开发总结。
综合评分:4.4(23位用户评分)
13积分/C币
下载个数:
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var q = $("#form1").serializeArray();
console.log(q);
var res_area_r = $.trim($(".res_area_r").val());
if (res_area_r == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
var mess = $(".res_area_r").val();
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, _username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click",'.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
$(".res_area_r").val($.trim($(".res_area").val()));
评论共有22条
功能简单,但是在这基础上可以增加很多东西,谢谢
如何在Android Studio中调试通过?
好像都无法再Android Studio中调试通过,不知道哪个可以?
试试在说!
还可以,跑,感谢,辛苦了
灰常好!!!
收藏备用,谢谢
不错,可用,谢谢!
不错,谢谢分享!
等弹出界面
没有获取到卡中的数据或者卡的id
还没用起来, 先谢谢。
审核通过送C币
android通用
创建者:preferg
【官方绿色版】gradle全版本,持续更新。。。
创建者:zhou_anzhuojinjie
Android Studio Gradle常用版本集合
上传者其他资源上传者专辑
android swig编译工具下载
android studio 使用NDK和swig编译c++示例
android 使用Java库xstream示例
android activity生命周期示例代码
android usb转串口数据通信示例
移动开发热门标签
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
android nfc开发demo
会员到期时间:
剩余下载个数:
剩余C币:593
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
(仅够下载10个资源)
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
android nfc开发demo

我要回帖

更多关于 万能门禁卡app破解版 的文章

 

随机推荐