我的标签包含Android Play应用的内容。当手机接近时,它会默认在Android Play商店中打开应用页面。 现在我想做的是写一个应用程序可以阅读这个标签。所以我修改AndroidManifest.xml如下:
<uses-permission android:name="android.permission.NFC" />
......
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:host="ext"
android:pathPrefix="/android.com:pkg"
android:scheme="vnd.android.nfc" />
</intent-filter>
......
我使用另一个标记应用来阅读此标记,其内容如下:
NDEF message
EXTERNAL: urn:nfc:ext:android.com:pkg
com.example.app
我认为关键点是意图过滤器。但是当我接近这个标签时,我不能在App上吃午饭。无论我的应用程序是在后台还是前台。有人能帮帮我吗?感谢。
答案 0 :(得分:0)
我找到了答案。我让这个APP在前台运行时误解了前景的含义。它必须添加enableForegroundDispatch,如下所示:
private NfcAdapter nfcAdapter;
private PendingIntent mPendingIntent;
private IntentFilter[] mFilters;
private String[][] mTechLists;
protected void onCreate(Bundle savedInstanceState)
nfcAdapter = NfcAdapter.getDefaultAdapter(this);
mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
IntentFilter ndefPkg = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
try {
ndefPkg.addDataScheme("vnd.android.nfc");
ndefPkg.addDataAuthority("ext", null);
ndefPkg.addDataPath("/android.com:pkg", 0);
} catch (Exception e) {
e.printStackTrace();
}
mFilters = new IntentFilter[] {ndefPkg;
mTechLists = new String[][] { new String[] { NfcF.class.getName() } };
}
protected void onResume() {
super.onResume();
nfcAdapter.enableForegroundDispatch(this, mPendingIntent, mFilters, mTechLists);
}
protected void onPause() {
super.onPause();
nfcAdapter.disableForegroundDispatch(this);
}