Я разрабатываю приложение для Android для сбора информации о тегах NFC. Я использую устройство Google Nexus S.
Когда я искал эту тему, я нашел много информации о получении моей заявки в диалоговом окне «Выполнить действие с помощью». Теперь все работает нормально, когда я читаю метку RFID, я могу выбрать свое приложение и проанализировать INTENT.
Пара приложений NFC из NXP также показывают операцию в диалоговом окне «Выполнить действие, используя», но когда одно из этих приложений активно (на переднем плане), я могу читать теги БЕЗ ВОПРОСА, ОПРЕДЕЛЯЕМЫЕ, какое приложение открыть.
Мой вопрос: Как я могу ПРЕДОТВРАТИТЬ диалоговое окно «Выполнить действие, используя», когда мое приложение уже работает, как 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
}
}
}