您的位置:首页 > 其它

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

2015-11-02 13:49 393 查看
[b]最近[/b]接到一个项目:将手机放到一个带有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" />

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.beautifulzzzz.nfc_test"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19" />

<!--
see http://www.developer.com/ws/android/nfc-programming-in-android.html for reference (note
that the minimum API version must be set as 10 in build.gradle (Module: app) for this to work,
and that classes being used from the nfc package require a minimum API version 14):
-->
16     <uses-feature
17         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"/>

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".Activity_Main"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

37             <intent-filter>
38                 <action android:name="android.nfc.action.TAG_DISCOVERED" />
39                 <category android:name="android.intent.category.DEFAULT" />
40             </intent-filter>
</activity>
</application>

</manifest>


Activity中也比较简单——

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

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

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

public class Activity_Main extends Activity {

NfcAdapter nfcAdapter;
TextView promt;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ui_main);
promt = (TextView) findViewById(R.id.promt);
// 获取默认的NFC控制器
nfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (nfcAdapter == null) {
promt.setText("设备不支持NFC!");
System.out.println("设备不支持NFC!");
finish();
return;
}
if (!nfcAdapter.isEnabled()) {
promt.setText("请在系统设置中先启用NFC功能!");
System.out.println("请在系统设置中先启用NFC功能!");
finish();
return;
}
promt.setText("正常启用APP!");
System.out.println("正常启用APP!");
}

@Override
protected void onResume() {
super.onResume();
promt.setText(getIntent().getAction());
System.out.println("正常启用APP!");

PowerManager pm=(PowerManager) getSystemService(Context.POWER_SERVICE);
//获取电源管理器对象
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "bright");
//获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是LogCat里用的Tag
wl.acquire();
//点亮屏幕
wl.release();
//释放

KeyguardManager  km= (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
//得到键盘锁管理器对象
KeyguardLock kl = km.newKeyguardLock("unLock");
//参数是LogCat里用的Tag
kl.disableKeyguard();
//解锁</pre><br><br>
}
}


资源链接

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

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

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

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

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

@beautifulzzzz

2015-11-02 持续更新中~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: