如何在Android应用程序内全局读取NFC标签数据

时间:2014-10-08 16:21:38

标签: android android-intent android-service nfc intentfilter

我想阅读我的应用程序中的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方法中收到意图。

1 个答案:

答案 0 :(得分:0)

您无法通过服务(或广播接收器)接收NFC发现意图(NDEF_DISCOVEREDTECH_DISCOVEREDTAG_DISCOVERED)。 Android上的NFC被设计为用户交互的一种手段,因此,这些意图仅传递给活动。

您可以使用的技巧是使用不可见/透明活动来处理意图。见How to run android program without open the app?