完成操作使用(避免在应用程序运行时出现对话框)

时间:2011-08-03 08:28:16

标签: android android-intent nfc

我正在开发一个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
        }
    }
}

1 个答案:

答案 0 :(得分:0)

  

当我的应用程序像NXP一样运行时,如何预防“使用完整操作”对话框?

使用enableForegroundDispatch()表示您处理的标记事件。 Here is a sample project证明了这一点。