package com.dayu.henanlibrary.activity; /** * Created by zuo on 2018/12/2. */ import android.app.Activity; import android.app.PendingIntent; import android.content.Intent; import android.nfc.NfcAdapter; import android.os.Handler; import android.provider.Settings; import com.dayu.baselibrary.activity.BaseActivity; import com.dayu.baselibrary.utils.TipUtil; import com.dayu.baselibrary.utils.ToastUtil; import com.dayu.henanlibrary.card.UserCard; /** * Author:Created by Ricky on 2017/8/25. * Email:584182977@qq.com * Description: * 子类在onNewIntent方法中进行NFC标签相关操作。 * launchMode设置为singleTop或singelTask,保证Activity的重用唯一 * 在onNewIntent方法中执行intent传递过来的Tag数据 * 将NFC标签卡靠近手机后部(NFC标签卡可网上自行购买) */ public class BaseNfcActivity extends HNBaseActivity { /** * 该卡已写入用户信息 */ public final static int HAS_USER = 1; /** * 该卡未写入用户信息 */ public final static int NO_USER = 2; /** * 充值 */ public final static int RECHARGE = 3; public final static int ERROR = -1; protected NfcAdapter mNfcAdapter; private PendingIntent mPendingIntent; Handler handler; volatile UserCard userCard; /** * onCreat->onStart->onResume->onPause->onStop->onDestroy * 启动Activity,界面可见时. */ public static int READER_FLAGS = NfcAdapter.FLAG_READER_NFC_A | NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK; @Override protected void onStart() { super.onStart(); //此处adapter需要重新获取,否则无法获取message mNfcAdapter = NfcAdapter.getDefaultAdapter(this); Intent intent = new Intent(this, getClass()); //一旦截获NFC消息,就会通过PendingIntent调用窗口 mPendingIntent = PendingIntent.getActivity(this, 0, intent, 0); // mLoyaltyCardReader = new LoyaltyCardReader(this); // if (mNfcAdapter != null) { // mNfcAdapter.enableReaderMode(this, mLoyaltyCardReader, READER_FLAGS, null); // } } /** * 获得焦点,按钮可以点击 */ @Override public void onResume() { super.onResume(); if (!ifNFCUse(this)) { this.finish(); } //设置处理优于所有其他NFC的处理 if (mNfcAdapter != null) mNfcAdapter.enableForegroundDispatch(this, mPendingIntent, null, null); } /** * 暂停Activity,界面获取焦点,按钮可以点击 */ @Override public void onPause() { super.onPause(); //恢复默认状态 if (mNfcAdapter != null) mNfcAdapter.disableForegroundDispatch(this); // mNfcAdapter.disableReaderMode(this); } // @Override // protected void onDestroy() { // super.onDestroy(); // if (mNfcAdapter != null) // mNfcAdapter.disableReaderMode(this); // } /** * 检测工作,判断设备的NFC支持情况 * * @return */ protected Boolean ifNFCUse(Activity context) { if (mNfcAdapter == null) { TipUtil.show(context, "设备不支持NFC!"); return false; } if (mNfcAdapter != null && !mNfcAdapter.isEnabled()) { startActivity(new Intent(Settings.ACTION_NFC_SETTINGS)); ToastUtil.showLong("请在系统设置中先启用NFC功能!"); return false; } return true; } }