最近接到一个项目:将手机放到一个带有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 26 7 10 11 16 19 20 21 22 23 24 29 32 33 36 3734 35 38 41 42 43 4439 40
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 //解锁 49 } 50 }
资源链接
@beautifulzzzz
2015-11-02 持续更新中~