我对android编程的概念还是陌生的。我目前正在尝试开发一个能够读取、写入 NFC 标签的应用程序。
但是,我似乎找不到我的 google 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 x 3 图像按钮和一些精美图片的 GridView。当应用程序检测到 ndef 标签时会发生挂起,它能够加载主页意图内容,但是当我按下 Nexus 上的后退按钮时,它会挂在那里。它似乎卡在(堆栈)
BinderProxy.transact
INfcAdapter$Stub$Proxy.setForegroundDispatch
NfcAdapter.enableForegroundDispatch
MainActivity.enableForegroundMode
似乎 enableForegroundDispatch 给我带来了问题。任何人都可以帮忙吗?