最近接到一个项目:将手机放到一个带有NFC卡的底座上手机会自动解锁,然后打开相应的应用

本人用:杭州公交通用卡做为NFC卡+Coolpad手机进行试验

效果如下:

1、手机本身带有图案锁,输对图案才能解锁

2、Coolpad带有NFC功能

3、把手机内的所有正在运行的应用清空

4、关闭手机(目前处于锁住状态)

5、将NFC卡靠近

6、自动解锁+启动应用

注:我用华为的手机无法实现突破锁屏、打开应用的效果

工程核心代码

整个代码比较简单:(新建一个工程)在AndroidManifest.xml加入uses-feature和permission

同时还要在相应的activity中加入intent-filter,这里注意一定要加:<category android:name="android.intent.category.DEFAULT" />

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.beautifulzzzz.nfc_test"
  4. android:versionCode="1"
  5. android:versionName="1.0" >
  6.  
  7. <uses-sdk
  8. android:minSdkVersion="14"
  9. android:targetSdkVersion="19" />
  10.  
  11. <!--
  12. see http://www.developer.com/ws/android/nfc-programming-in-android.html for reference (note
  13. that the minimum API version must be set as 10 in build.gradle (Module: app) for this to work,
  14. and that classes being used from the nfc package require a minimum API version 14):
  15. -->
  16. 16 <uses-feature
  17. 17 android:name="android.hardware.nfc"
  18. 18 android:required="true" />
  19. 19 <uses-permission android:name="android.permission.NFC" />
  20. 20
  21. 21 <uses-permission android:name="android.permission.WAKE_LOCK"/>
  22. 22 <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
  23.  
  24. <application
  25. android:allowBackup="true"
  26. android:icon="@drawable/ic_launcher"
  27. android:label="@string/app_name"
  28. android:theme="@style/AppTheme" >
  29. <activity
  30. android:name=".Activity_Main"
  31. android:label="@string/app_name" >
  32. <intent-filter>
  33. <action android:name="android.intent.action.MAIN" />
  34. <category android:name="android.intent.category.LAUNCHER" />
  35. </intent-filter>
  36.  
  37. 37 <intent-filter>
  38. 38 <action android:name="android.nfc.action.TAG_DISCOVERED" />
  39. 39 <category android:name="android.intent.category.DEFAULT" />
  40. 40 </intent-filter>
  41. </activity>
  42. </application>
  43.  
  44. </manifest>

Activity中也比较简单——

onCreate中检测硬件是否支持和是否打开NFC

onResume中通过getIntent().getAction()获取当前的action然后显示在UI的文本显示区中

  第34-48行是冲破图案锁,电量屏幕用的

  1. public class Activity_Main extends Activity {
  2.  
  3. NfcAdapter nfcAdapter;
  4. TextView promt;
  5. @Override
  6. public void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.ui_main);
  9. promt = (TextView) findViewById(R.id.promt);
  10. // 获取默认的NFC控制器
  11. nfcAdapter = NfcAdapter.getDefaultAdapter(this);
  12. if (nfcAdapter == null) {
  13. promt.setText("设备不支持NFC!");
  14. System.out.println("设备不支持NFC!");
  15. finish();
  16. return;
  17. }
  18. if (!nfcAdapter.isEnabled()) {
  19. promt.setText("请在系统设置中先启用NFC功能!");
  20. System.out.println("请在系统设置中先启用NFC功能!");
  21. finish();
  22. return;
  23. }
  24. promt.setText("正常启用APP!");
  25. System.out.println("正常启用APP!");
  26. }
  27.  
  28. @Override
  29. protected void onResume() {
  30. super.onResume();
  31. promt.setText(getIntent().getAction());
  32. System.out.println("正常启用APP!");
  33.  
  34. PowerManager pm=(PowerManager) getSystemService(Context.POWER_SERVICE);
  35. //获取电源管理器对象
  36. PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "bright");
  37. //获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是LogCat里用的Tag
  38. wl.acquire();
  39. //点亮屏幕
  40. wl.release();
  41. //释放
  42.  
  43. KeyguardManager km= (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
  44. //得到键盘锁管理器对象
  45. KeyguardLock kl = km.newKeyguardLock("unLock");
  46. //参数是LogCat里用的Tag
  47. kl.disableKeyguard();
  48. //解锁</pre><br><br>
  49. }
  50. }

资源链接

Android 解屏幕锁与点亮屏幕(来电时效果)

android之android.intent.category.DEFAULT的用途和使用

Android NFC开发概述(作者找了很多网上的NFC资料,可参考,有疏漏)

Android NFC 开发实例(一个简单的demo,我试了几下有点小问题,可参考)

本工程下载地址:http://pan.baidu.com/s/1c04ries

@beautifulzzzz

  2015-11-02 持续更新中~

[安卓] 15、用NFC解锁手机并自动打开应用的更多相关文章

  1. 8、NFC技术:让Android自动打开网页

    创建封装Uri的NdefRecord  public  NdefRecord  createUri(String  uriString);  public  NdefRecord  cre ...

  2. 微信中扫描二维码自动打开手机系统默认浏览器下载APP(APK)

    很多朋友问我怎么解决微信内点击链接或扫描二维码可以直接跳出微信在外部浏览器打开网页链接,其实这并不难,只要我们实现微信跳转功能即可.下面给大家介绍这个功能 功能目的 生成微信跳转链接,实现微信内置浏览 ...

  3. Android SimpleAdapter ListView (锁定手机,解锁手机的列表)

    SimpleAdapter是扩展性最好的适配器,可以定义各种你想要的布局. 构造方法: SimpleAdapter(Context context, List<? extends Map< ...

  4. vue-cli2.9.1如何自动打开浏览器及实现手机调试

    在vue-cli2.9.1以前我们运行 "npm run dev" 程序会自动打开浏览器进行调试,而且在手机浏览器输入 "IP地址:8080" 能实现在手机端的 ...

  5. 门禁 IC卡 ID 卡 RFID 手环 NFC 银行卡 手机模拟门禁

    门禁 IC卡 ID 卡 RFID 手环 NFC 银行卡 手机模拟门禁 原因 最近给公司换了一个门禁. 旧的门禁按键面板已经破了. 不支持我的手环. 按了密码后竟然要按 #. 相关信息 查了资料记录一下 ...

  6. Chrome安卓H5调试,连接手机检测不到页面

    Chrome安卓H5调试,连接手机检测不到页面,重启什么的都不行,未找到设备,或者offline,怎么办? 首先手机开启调试模式是必须的 然后用adb工具箱,cmd进来 运行命令 adb kill-s ...

  7. 手机浏览器自动播放视频video(设置autoplay无效)的解决方案

    1.问题的提出 某一天接了个需求,需要在手机的H5页面内加入视频,我开开心心做完,准备交付的时候,问题来了,PM想要用户一进入页面,视频就开始播放,不需要用户手动点击. 2.尝试解决 加autopla ...

  8. 微信中打开链接,自动打开外部浏览器打开指定URL页面

    上半年公司有一个新的APP项目上线,我们在项目首页做个二维码,然后用户用手机扫一扫就能下载了.但是很多用户反映扫一扫之后下载不了,了解之后才知道这些用户都是使用的微信的扫一扫,而我们开发测试人员一般使 ...

  9. webpack之带有可自动打开浏览器及热重载的基本配置

    什么是Webpack WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并 ...

随机推荐

  1. Java 内部类摘抄

    关于Java的内部类,要说的东西实在太多,这篇博文中也无法一一具体说到,所以就挑些重点的讲.关于内部类的使用,你可能会疑问,为什么我们要使用内部类?为了回答这个问题,你需要知道一些关于内部类的重点.所 ...

  2. ArrayList与LinkedList用法与区别

    1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.  2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedLis ...

  3. 通过反射及注解的运用获取SQL语句

    import java.lang.reflect.*; public class BeanUtil { //这是拼接查询SQL语句的方法(getDelectSQL) public static Str ...

  4. [ MySql学习心得 ] --One

    一.安装MySql 1.解压版安装 下载地址: http://dev.mysql.com/downloads/mysql/ 安装及配置教程:http://jingyan.baidu.com/artic ...

  5. 什么是F#

    作者:Alexey Bykov@EastBancTech原文:http://bit.ly/1nGroOz翻译:kk1982.com转载请注明 简介 F#是由微软研究团队为.NET平台研发的一种现代函数 ...

  6. Unity3D安卓打包参数配置与兼容性的关系分析

    前言 在使用Unity3D工程导出安卓安装包的时候,往往会遇到兼容性的问题,针对某些机型,要么无法打开游戏,要么会出现卡机的现象.面对这种情况,我们可以调节相关的参数来提高兼容性. 为了了解在打包时候 ...

  7. mybatis报invalue types()错误

    错误信息: Cause: org.apache.ibatis.reflection.ReflectionException: Error instantiating class cn.qd.mybat ...

  8. Win7 64位 VS2013环境cuda_7.5.18的一些坑

    thrust库的sort算法,在x86平台使用就崩溃,x64就没问题,搜了下好像是很早的版本,4开始就有这样的问题了,原因不明. http://stackoverflow.com/questions/ ...

  9. Font Awesome图标库

    Font Awesome 是一个非常方便的图标库.这些图标都是矢量图形,被保存在 .svg 的文件格式中.这些图标就和字体一样,你可以通过像素单位指定它们的大小,它们将会继承其父HTML元素的字体大小 ...

  10. mysql 函数(二)

    1.space(N) 输出空格 SELECT SPACE(5); -> '     ' 2.replace(str,from_str,to_str) 讲str中的from_str 替换成to_s ...