我想阅读我的应用程序中的NFC标签数据。基本上我有不同的NFC标签与在我的应用程序内执行的不同操作相关联。我知道在IntentFilter
内声明Service
是一个坏主意。我不想将其与任何Activity
相关联。
这是我的清单:
<service android:name="com.yo.helpers.NFCReaderHelper"
android:enabled="true"
android:exported="true" >
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</service>
这是我的服务类:
@Override
protected void onHandleIntent(Intent intent) {
Log.d("yoyo", "Service");
Tag mTag = null;
if(intent.getAction()!=null)
{
if(intent.getAction().equals("android.nfc.action.NDEF_DISCOVERED"))
Log.d("yoyo", "Intent call");
mTag = (Tag) intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
Log.i("tag ID", bytesToHexString(mTag.getId()));
}
}
我没有在onHandleIntent
方法中接听电话。如果我在Activity
内做同样的事情,那么我会在onNewIntent
方法中收到意图。
答案 0 :(得分:0)
您无法通过服务(或广播接收器)接收NFC发现意图(NDEF_DISCOVERED
,TECH_DISCOVERED
,TAG_DISCOVERED
)。 Android上的NFC被设计为用户交互的一种手段,因此,这些意图仅传递给活动。
您可以使用的技巧是使用不可见/透明活动来处理意图。见How to run android program without open the app?