2012-12-21 66 views
0

我正在構建與USB NFC閱讀器交互的應用程序(適用於沒有本機NFC的設備)。接收器是USB接口,附帶一個很好的SDK,它看起來像廣告一樣工作(因爲我可以成功讀取通過閱讀器滑過的標籤)。添加廣播接收器以與外部USB設備綁定

我認爲我的挑戰應該是非常直接的,但如何實施還不清楚如何註冊我的應用程序,以便在附加NFC附件的NFC閱讀器被NFC標籤附近觸發時收到通知。

難道我剛剛註冊調用類似的廣播接收器:

UsbDevice device = (UsbDevice) intent 
          .getParcelableExtra(UsbManager.EXTRA_DEVICE); 

,並啓動我的應用程序自己?不知何故,這感覺不對。

TIA

回答

1

我建議創建一個註冊在清單中的BroadcastReceiver。這將允許您的應用程序即使沒有運行也能得到通知。

public class NfcReceiver extends BroadcastReceiver { 
    /* ... */ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) { 
      Parcelable[] rawMsgs =_ 
       intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); 
      if (rawMsgs != null) { 
       msgs = new NdefMessage[rawMsgs.length]; 
       for (int i = 0; i < rawMsgs.length; i++) { 
        msgs[i] = (NdefMessage) rawMsgs[i]; 
       } 
      } 
     } /* end handle NDEF_DISCOVERED */ 
    } /* end onReceive */ 
} /* end BroadcastReceiver*/ 

在您的清單中,一定要添加適當的意圖過濾器(我從來沒有做過NFC,但我相信這是正確的,讓你開始:)

<uses-feature android:name="android.hardware.nfc" android:required="true" /> 
<uses-sdk android:minSdkVersion="10"/> 
<uses-permission android:name="android.permission.NFC" /> 

<receiver android:name=".NfcReceiver"> 
    <intent-filter> 
     <action android:name="android.nfc.action.NDEF_DISCOVERED"/> 
     <category android:name="android.intent.category.DEFAULT"/> 
     <data android:mimeType="text/plain" /> 
    </intent-filter> 
</receiver> 

http://developer.android.com/guide/topics/connectivity/nfc/nfc.html

http://developer.android.com/guide/topics/connectivity/nfc/advanced-nfc.html

如果您可以/希望走這條路線,還有解決方案,例如:

http://mobisocial.github.com/EasyNFC/apidocs/reference/mobisocial/nfc/Nfc-source.html

+0

當eclipse提供提示時,我沒有看到ACTION_HANDLE_NDEF作爲可能的選項。我在哪裏可以驗證該標誌是否真的存在? –

+0

對不起,該權限實際上是特定於引用的EasyNfc庫。更新了示例代碼並添加了鏈接。 – CodeShane