80,351
社区成员
发帖
与我相关
我的任务
分享
mAdapter.enableForegroundDispatch(this, mPendingIntent, mFilters,
mTechLists);
3、在onpause中关闭nfc
if(mAdapter != null && mAdapter.isEnabled())
mAdapter.disableForegroundDispatch(this);
4、当刷卡时,生命周期onpause->onnewintent->onresume
读卡信息是在Onnewintent中来实现的,所以只需根据是否登录的标记来判断是否读卡就行
在onnewintent中:
if(login)
获取卡信息;
else
return;
Intent intent = new Intent();
intent.putExtra("login", false);//这里就可以传进去是否登录成功的信息,假设用bool值。
ComponentName cn = new ComponentName(pagName, claName);
intent.setComponent(cn);
startActivity(intent);
在nfc apk中可以把这个bool值取出来:
getIntent().getBooleanExtra("login", false);//这里的false是默认值,也就是没取到值就默认false,取到了值就按取到的来。
这样你就可以判断到是不是登录了。
其实你的应用的问题不在这里。你把登录和nfc分成了两个apk来做,所以用户可以在没登录的情况下启动nfc。正确的做法是放到一个apk里面,登录了以后才转到nfc界面。最不济,你也的把nfc这个apk的Manifest里的 <intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
去掉,这样nfc apk就不会显示在Launcher里面,用户就不能在未登录时启动这个apk了。
几种解决方案,看你怎么选了。protected void onResume() {
super.onResume();
// 得到是否检测到ACTION_TECH_DISCOVERED触发
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
// 处理该intent
resolveIntent(getIntent());
}else if(NfcAdapter.ACTION_TAG_DISCOVERED.equals(getIntent().getAction())){
resolveIntent(getIntent());
}else if(NfcAdapter.ACTION_TECH_DISCOVERED.equals(getIntent().getAction())){
resolveIntent(getIntent());
}
}
void resolveIntent(Intent intent) {
String uid=Coverter.getUid(intent);
String text="本标签的UID为"+"【"+uid+"】";
Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
}
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.lsh.readuid.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.TECH_DISCOVERED" />
</intent-filter>
<meta-data
android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tech_filter" />
</activity>
</application>