关于android工程中nfc的功能问题 androidnfc控指针 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 nfc刷卡是在用Service实现的吧?登录以后才启动这个Service,或者用一个静态变量来记录是否登录成功,Service里面判断这个变量为true才会去读取卡号什么的操作,为false就不要操作。 我也是这样想的,下面附上代码和配置文件中的代码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> 不知道怎么判断哪个Service。PS:我是搞ios,android那边比较忙,过来帮忙搞这个nfc功能,业余班子,求指教 看你的配置文件,你就只有一个Activity啊....按2L说的,你把NFC那块写到Service里面去 你这个貌似登录是一个apk,nfc是另外一个apk?这样你需要在登录成功,启动nfc这个apk的时候,用Intent把是否登录成功的信息传递给nfc这个apk。在nfc这个apk中把Intent中对应的信息取出来,接下来的就可以处理了。从登录apk中启动nfc apk的代码大概是这个样子(这段代码在登录apk中): 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了。几种解决方案,看你怎么选了。 在一个apk里面怎么Manifest里面只有一个Activity呢?如果在一个apk里面,一样的做法。登录Activity跳转到nfc Activity的时候,用intent携带是否登录成功的信息,在nfc Activity里面把这个信息取出来。代码都在上面了。 NFC的处理流程应该是这样的1、在oncreate中初始化好nfc2、在onresume启用nfc mAdapter.enableForegroundDispatch(this, mPendingIntent, mFilters, mTechLists);3、在onpause中关闭nfcif(mAdapter != null && mAdapter.isEnabled()) mAdapter.disableForegroundDispatch(this);4、当刷卡时,生命周期onpause->onnewintent->onresume读卡信息是在Onnewintent中来实现的,所以只需根据是否登录的标记来判断是否读卡就行在onnewintent中:if(login) 获取卡信息;else return; LZ可以吧响应nfc的activity设置成透明的 然后在onresume中接受读卡的数据然后通过广播发送出去,直接关闭掉这个activity我的项目就是这么做得 这个bug人生观都要给我改变了。。求解答。 BaseAdapter中的GetCount方法频繁调用,请高手看看 三无人员求指导啊 Android中Notification提示添加Button事件无效 获取google weather api中支持的天气种类 如何用多个按钮分别实现多个Activity间的切换 菜鸟咨询一个Android开发入门的问题 如何实现这种图片集的界面? 一个关于TimerPicker显示样式的问题 疯狂adroid讲义里一个问题 要不要从Android客户端应用开发向服务器端大数据处理方向转型? 关于android百度地图定位的问题
登录以后才启动这个Service,或者用一个静态变量来记录是否登录成功,Service里面判断这个变量为true才会去读取卡号什么的操作,为false就不要操作。
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>
按2L说的,你把NFC那块写到Service里面去
这样你需要在登录成功,启动nfc这个apk的时候,用Intent把是否登录成功的信息传递给nfc这个apk。在nfc这个apk中把Intent中对应的信息取出来,接下来的就可以处理了。
从登录apk中启动nfc apk的代码大概是这个样子(这段代码在登录apk中):
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了。几种解决方案,看你怎么选了。
如果在一个apk里面,一样的做法。登录Activity跳转到nfc Activity的时候,用intent携带是否登录成功的信息,在nfc Activity里面把这个信息取出来。代码都在上面了。
1、在oncreate中初始化好nfc
2、在onresume启用nfc
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;