NFC一次貼片終生讀卡實現(xiàn)(普通應(yīng)用版)

之前寫了一篇關(guān)于系統(tǒng)應(yīng)用實現(xiàn)一次貼片多次讀卡的文章,實際運用過程中發(fā)現(xiàn)了一些小問題吻育,某些設(shè)備(android 8.0可以,android7.0不可以)在線程中反射調(diào)用系統(tǒng)api時有時會不成功冕臭,導(dǎo)致之后設(shè)備讀得了卡余蟹,但是我的應(yīng)用收不到卷胯,不走onNewIntent,嘗試4.4以上的新方法enableReaderMode()也不返回NfcAdapter.ReaderCallback的onTagDiscovered回調(diào)威酒。

莫得辦法诵竭,又不能刪庫跑路,只能另尋他路兼搏,在擺弄著我的設(shè)備時,忽然發(fā)現(xiàn)了一個有趣的現(xiàn)象沙郭,當(dāng)我熄屏再亮屏的時候佛呻,我的app居然又收到了標簽信息。

實現(xiàn)思路:通過控制屏幕的亮滅來實現(xiàn)一次貼卡多次讀卡

網(wǎng)上很多說用PowerManager和PowerManager.WakeLock來實現(xiàn)亮滅病线,根本就不行吓著,還需要設(shè)備管理員權(quán)限才可以鲤嫡。

具體如下:

1.添加權(quán)限:

<uses-permission android:name="android.permission.WAKE_LOCK" />

2.添加Receiver:

< android:name=".newfunction.nfc.receiver.ScreenOffAdminReceiver"

? ? android:label="@string/app_name"

? ? android:permission="android.permission.BIND_DEVICE_ADMIN">

? ? ? ? android:name="android.app.device_admin"

? ? ? ? android:resource="@xml/device_admin" />

? ? ? ? <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />

</receiver>

3.Receiver的實現(xiàn):

public class ScreenOffAdminReceiver extends DeviceAdminReceiver {

}

4.需要的xml包下device_admin.xml:

<?xml version="1.0" encoding="utf-8"?>

<device-admin xmlns:android="http://schemas.android.com/apk/res/android">

<uses-policies>

<!-- 強行鎖定 在里僅這個是需要的-->

<force-lock />

</uses-policies>

</device-admin>

5.activity中初始化參數(shù)

private DevicePolicyManager policyManager;

private ComponentName adminReceiver;

private PowerManager mPowerManager;

private PowerManager.WakeLock mWakeLock;

private void initParams() {

adminReceiver =new ComponentName(this, ScreenOffAdminReceiver.class);

? ? mPowerManager = (PowerManager) getSystemService(POWER_SERVICE);

? ? policyManager = (DevicePolicyManager)this.getSystemService(Context.DEVICE_POLICY_SERVICE);

}

6.檢測是否有權(quán)限的方法以及亮滅屏

/**

* @param view 亮屏

*/

public void checkScreenOn(View view) {

mWakeLock =mPowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "tag");

? ? mWakeLock.acquire();

? ? mWakeLock.release();

}

/**

* @param view 熄屏

*/

public void checkScreenOff(View view) {

boolean admin =policyManager.isAdminActive(adminReceiver);

? ? if (admin) {

policyManager.lockNow();

? ? }else {

showToast("沒有設(shè)備管理權(quán)限");

? ? }

}

/**

* @param view 檢測并去激活設(shè)備管理器權(quán)限

*/

public void checkAndTurnOnDeviceManager(View view) {

Intent intent =new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);

? ? intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, adminReceiver);

? ? intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "開啟后就可以使用鎖屏功能了...");//顯示位置見圖二

? ? startActivityForResult(intent, 0);

}

private boolean isOpen() {

if (policyManager.isAdminActive(adminReceiver)) {//判斷超級管理員是否激活

? ? ? ? return true;

? ? }else {

return false;

? ? }

}

//用戶激活設(shè)備管理權(quán)限的回調(diào)

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

? ? if (isOpen())

showToast("設(shè)備已被激活");

else

? ? ? ? showToast("設(shè)備沒有被激活");

}

private void showToast(String Str) {

Toast.makeText(this, Str, Toast.LENGTH_SHORT).show();

}

7.使用

while (isNfcTestStart) {

checkScreenOn(null);//亮屏

//業(yè)務(wù)邏輯

checkScreenOff(null);//熄屏

}

這樣就實現(xiàn)了一次讀卡終生讀取了,更好的實現(xiàn)目前還沒找到绑莺,有知道的大佬評論區(qū)或者私信我暖眼,一起探討探討。

手打不易纺裁,點個贊唄诫肠。


亮滅屏參考文章:

https://blog.csdn.net/u011913612/article/details/77822280

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市欺缘,隨后出現(xiàn)的幾起案子栋豫,更是在濱河造成了極大的恐慌,老刑警劉巖谚殊,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丧鸯,死亡現(xiàn)場離奇詭異,居然都是意外死亡嫩絮,警方通過查閱死者的電腦和手機丛肢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來剿干,“玉大人蜂怎,你說我怎么就攤上這事≡狗撸” “怎么了派敷?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長撰洗。 經(jīng)常有香客問我篮愉,道長,這世上最難降的妖魔是什么差导? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任试躏,我火速辦了婚禮,結(jié)果婚禮上设褐,老公的妹妹穿的比我還像新娘颠蕴。我一直安慰自己,他們只是感情好助析,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布犀被。 她就那樣靜靜地躺著,像睡著了一般外冀。 火紅的嫁衣襯著肌膚如雪寡键。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天雪隧,我揣著相機與錄音西轩,去河邊找鬼员舵。 笑死,一個胖子當(dāng)著我的面吹牛藕畔,可吹牛的內(nèi)容都是我干的马僻。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼注服,長吁一口氣:“原來是場噩夢啊……” “哼韭邓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起祠汇,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤仍秤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后可很,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诗力,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年我抠,在試婚紗的時候發(fā)現(xiàn)自己被綠了苇本。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡菜拓,死狀恐怖瓣窄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情纳鼎,我是刑警寧澤俺夕,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站贱鄙,受9級特大地震影響劝贸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜逗宁,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一映九、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瞎颗,春花似錦件甥、人聲如沸渊季。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咐鹤。三九已至,卻和暖如春缓熟,著一層夾襖步出監(jiān)牢的瞬間袒哥,已是汗流浹背韵丑。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留导帝,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓穿铆,卻偏偏與公主長得像您单,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子荞雏,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容