我正在开发一个Android应用程序来捕获NFC标签信息。我使用的设备是Google Nexus S.
当我搜索这个主题时,我发现了很多关于在“使用完整操作”对话框中获取我的应用程序的信息。现在工作正常,当我读取RFID标签时,我可以选择我的应用程序并解析INTENT。
NXP的一些NFC应用程序也在“使用完整操作”对话框中显示操作,但当其中一个应用程序处于活动状态(前景)时,我可以阅读标签而无需再次询问要打开的应用程序。
我的问题:当我的应用程序像NXP一样运行时,如何预防“使用完整操作”对话框?
注意:我的应用程序已设置为单实例模式。
以下是我的代码片段:
package nfc.test;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentFilter.MalformedMimeTypeException;
import android.nfc.*;
import android.nfc.tech.*;
import android.os.Bundle;
public class NfcActivity extends Activity {
private NfcAdapter mAdapter;
private PendingIntent mPendingIntent;
private IntentFilter[] mFilters;
private String[][] mTechLists;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAdapter = NfcAdapter.getDefaultAdapter(this);
mPendingIntent = PendingIntent.getActivity(
this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
IntentFilter techFilter = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);
IntentFilter tagFilter = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
IntentFilter ndefFilter = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
try {
techFilter.addDataType("*/*"); // Handles all MIME based dispatches.
tagFilter.addDataType("*/*"); // You should specify only the ones that you need.
ndefFilter.addDataType("*/*");
} catch (MalformedMimeTypeException e) {
DialogHelper.showErrorDialog(this, "MalformedMimeTypeException" + e.getMessage());
}
mFilters = new IntentFilter[] {
techFilter,
tagFilter,
ndefFilter
};
mTechLists = new String[][] { new String[] {
IsoDep.class.getName(), // ISO 14443-4
MifareClassic.class.getName(), // Mifare Classic
MifareUltralight.class.getName(), // Mifare Ultra Light
Ndef.class.getName(), // NFC Forum Type 1, 2, 3, 4 Compliant Tags
NdefFormatable.class.getName(), // Can be used as NDEF tag
NfcA.class.getName(), // ISO 14443-3A
NfcB.class.getName(), // ISO 14443-3B
NfcF.class.getName(), // JIS 6319-4
NfcV.class.getName() // ISO 15693
} };
}
@Override
public void onPause() {
super.onPause();
mAdapter.disableForegroundDispatch(this);
}
@Override
public void onResume() {
super.onResume();
mAdapter.enableForegroundDispatch(this, mPendingIntent, mFilters, mTechLists);
}
@Override
public void onNewIntent(Intent intent) {
super.setIntent(intent);
resolveIntent(intent);
}
public void resolveIntent(Intent intent) {
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())
|| NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())
|| NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
Tag tag = (Tag)intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
// Handle tag
}
}
}
答案 0 :(得分:0)
当我的应用程序像NXP一样运行时,如何预防“使用完整操作”对话框?
使用enableForegroundDispatch()
表示您处理的标记事件。 Here is a sample project证明了这一点。