我对Android NFC有疑问。
我已经完成了有关读写的功能,但仍有一个问题。
我在我的标签中写了AAR,在第一次感应之后,它可以启动我的应用程序。
第二次感应(我的应用程序已启动),我可以从NFC标签中读取数据。
是否可以只检测一次可以启动我的应用程序并从标签获取数据?
答案 0 :(得分:1)
使用以下模式(来自here)。总结:
前台模式允许您以发送到onNewIntent的意图形式捕获扫描的标签。 onResume将跟随onNewIntent调用,因此我们将在那里处理意图。但是onResume也可以来自其他来源,所以我们添加一个布尔变量来确保我们只处理一次新的意图。
启动活动时也会出现意图。通过将布尔变量初始化为false,我们将其纳入上述流程 - 您的问题应该得到解决。
protected boolean intentProcessed = false;
public void onNewIntent(Intent intent) {
Log.d(TAG, "onNewIntent");
// onResume gets called after this to handle the intent
intentProcessed = false;
setIntent(intent);
}
protected void onResume() {
super.onResume();
// your current stuff
if(!intentProcessed) {
intentProcessed = true;
processIntent();
}
}
答案 1 :(得分:0)
在AndroidManifest中 -
<activity
android:name=".TagDiscoverer"
android:alwaysRetainTaskState="true"
android:label="@string/app_name"
android:launchMode="singleInstance"
android:screenOrientation="nosensor" >
<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.NDEF_DISCOVERED" />
<action android:name="android.nfc.action.TECH_DISCOVERED" />
<action android:name="android.nfc.action.TAG_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
<meta-data
android:name="android.nfc.action.TECH_DISCOVERED"/>
</activity>
你应该在OnCreate()中启动NFC采用者..
/**
* Initiates the NFC adapter
*/
private void initNfcAdapter() {
nfcAdapter = NfcAdapter.getDefaultAdapter(this);
mPendingIntent = PendingIntent.getActivity(this, 0,
new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
}
现在在OnResume()......
@Override
protected void onResume() {
super.onResume();
if (nfcAdapter != null) {
nfcAdapter.enableForegroundDispatch(this, mPendingIntent, null, null);
}
}