Завершите использование действия (избегайте диалога, когда приложение уже запущено) - PullRequest
0 голосов
/ 03 августа 2011

Я разрабатываю приложение для 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
        }
    }
}

1 Ответ

0 голосов
/ 03 августа 2011

Как я могу ПРЕДОТВРАТИТЬ диалоговое окно «Выполнить действие, используя», когда мое приложение уже работает, как NXP?

Используйте enableForegroundDispatch(), чтобы указать события тега, которые вы обрабатываете. Вот пример проекта , демонстрирующий это.

...