[安卓] 15、用NFC解锁手机并自动打开应用

来源:互联网 时间:1970-01-01

最近 接到一个项目:将手机放到一个带有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 (note13 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 <uses-feature17 android:name="android.hardware.nfc"18 android:required="true" />19 <uses-permission android:name="android.permission.NFC" />20 21 <uses-permission android:name="android.permission.WAKE_LOCK"/> 22 <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/> 23 24 <application25 android:allowBackup="true"26 android:icon="@drawable/ic_launcher"27 android:label="@string/app_name"28 android:theme="@style/AppTheme" >29 <activity30 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 <intent-filter>38 <action android:name="android.nfc.action.TAG_DISCOVERED" />39 <category android:name="android.intent.category.DEFAULT" />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 持续更新中~


相关阅读:
Top