意图传递给新活动后,NFC应用程序一直悬挂着

时间:2013-07-23 09:22:22

标签: android android-intent nfc

我还是Android编程概念的新手。我目前正在尝试开发一种能够读取,写入NFC标签的应用程序。

但是,我似乎无法找到我的谷歌Nexus发生的悬而未决的问题,也许一些有经验的开发人员可以指出我对这个问题有所了解。

首先,我有一个主要活动,当nfc标记进入范围时,它有一个待发起的意图。

//main activity
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //blank tag intent
    blankIntent = new Intent(MainActivity.this, DisplayBlankTagActivity.class);
    //ndef tag intent
    homeIntent = new Intent(MainActivity.this, DisplayHomeActivity.class);

    //initialize nfc
    NfcManager manager = (NfcManager)this.getSystemService(Context.NFC_SERVICE);
    nfcAdapter = manager.getDefaultAdapter();
    nfcPendingIntent = PendingIntent.getActivity(this, 0,
        new Intent(this, this.getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
}

public void onNewIntent(Intent intent) {
    // if tag is written
    if(NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
        startActivity(homeIntent);
    }
    // if blank tag
    else if(NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) {
        startActivity(blankIntent);
    }
}

public void enableForegroundMode() {
    //Intent filters
    IntentFilter nDefTag = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
    try {
        nDefTag.addType("text/plain");
    }catch(MalformedMimeTypeException e){}
    IntentFilter blankTag = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
    IntentFilter[] tagFilters = new IntentFilters[]{nDefTag, blankTag);
    nfcAdapter.enableForegroundDispatch(this, nfcPendingIntent, tagFilters, null);
}

public void onResume() {
    super.onResume();
    enableForegroundMode();
}

我的空白标记意图工作正常,它只是一个用简单的编辑框填写的表单。 我的家庭意图只是一个带有3×3图像按钮和一些精美图片的GridView。 当应用程序检测到ndef标记时会发生挂起,它可以加载主页意图内容但是当我按下Nexus上的后退按钮时,它会挂起。它似乎停留在(堆栈)

BinderProxy.transact
INfcAdapter$Stub$Proxy.setForegroundDispatch
NfcAdapter.enableForegroundDispatch
MainActivity.enableForegroundMode

似乎enableForegroundDispatch正在为我创建问题。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

只是要检查一下,你是否在onPause中设置了禁用前台调度并在mainactivity中进行了设置?如果你没有正确地禁用它,你将无法在返回时重新启用(后退按钮)。

@Override
protected void onPause()
{
mNfcAdapter.disableForegroundDispatch(this);
    super.onPause();
}