2012-06-17 3 views
8

NFC 태그와 상호 작용하는 간단한 애플리케이션을 작성하려고하지만 휴대 전화에서 아무것도하지 않고 기본 NFC 태그 앱을 실행하는 것처럼 보입니다. 나는 정말로 내가 스캔 한 태그를 가로 챌 수 있고, 그것에 어떤 데이터가 있는지를 결정하고 그에 따라 행동을 취할 수 있기를 원한다.Android NFC 인 텐트가 내 액티비티를 시작하지 않음

는 지금 내 매니페스트 파일은 NFC 태그를 스캔 그러나

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

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:name=".NfcActivity" 
     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"/> 
     </intent-filter> 
    </activity> 
</application> 

처럼, 나는 활동의 시작을 볼 수 없습니다 보인다. 내가 여기서 뭔가를 놓치고 있니? 나는 BroadcastReceiver 안에 인 텐트 필터를 놓으려고했는데 행운도 없었습니다 ...

답변

21

스캔 한 모든 NFC 태그로 앱을 시작할 수 없습니다. Android는 인 텐트 필터가 얼마나 구체적인지에 따라 가장 적합한 앱이 무엇인지 결정합니다. 그러나 앱이 포 그라운드에서 실행중인 경우 NFC foreground dispatch을 사용하여 모든 NFC 인 텐트를 포착 할 수 있습니다.

mAdapter = NfcAdapter.getDefaultAdapter(this); 
PendingIntent pendingIntent = PendingIntent.getActivity(
    this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); 

onResume() 담기 :

mAdapter.enableForegroundDispatch(this, pendingIntent, null, null); 

onPause() 담기 :

mAdapter.disableForegroundDispatch(this); 

onNewIntent에서이 같은 NFC 태그에서 얻을 수 있습니다 : onCreate() 추가에

Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 
+0

NFC 이벤트를 한 곳에서받을 수없는 이유는 무엇입니까? – FlyingStreudel

+1

NFC의 아이디어는 휴대 전화에서 자동으로 적절한 작업을 수행하는 등의 작업을 수행 할 수 있습니다. 몇 가지 예 : 브라우저에서 URL을 열고 Foursquare로 체크인하고 자동으로 Wi-Fi 네트워크에 연결합니다. Android는 앱의 의도 필터를 기반으로 NFC 의도를 전달할 앱을 결정합니다. 가장 구체적인 필터가 "이깁니다". 둘 이상의 일치 항목이 발견되면 앱 선택기가 사용자에게 표시됩니다. 한가지 예외가 있습니다 : 포어 그라운드에서 실행중인 앱이 특정 유형의 모든 NFC 인 텐트를 요청할 수있는 NFC 포어 그라운드 발송. –

+0

나는이 기능이 선택된 기능인 이유가 무엇인지 알지 못한다. SMS와 달리 수신자 수에 상관없이 인 텐트를 가져와 재방송 할 수있다. NFC 기술과의 상호 작용에서 단 하나의 행동 만 취하는 것으로 제한된다는 것은 어리석은 것처럼 보입니다. – FlyingStreudel

6

SDK 문서는 이것을 기본 예제로 보여줍니다.

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

위의 예에서'category' 요소에 유의하십시오. 정말 필요합니다 ("DEFAULT"라는 이름이 달리 제안 함). –

+0

다른 NFC 태그를 기반으로 다른 활동을 누가 시작할 수 있습니까? tag1/prod/234 또는 tag3/buyme/3422. 찌르다가 있다면, ProductionInfo 활동을 시작하고 싶지만, 목록에 넣고 싶습니다. – Karoly

0

안드로이드는 자동으로 스캔 된 NFC 태그를 처리 할 수있는 가장 관련성이 응용 프로그램을 choses. intent-filter에 더 구체적이어야합니다. 즉, TEXT-tags, URL-tags 또는 CONTACT-TAT만을 수신해야합니다. TEXT-Tags에 <data android:mimeType="text/plain" />을 사용하여 필터를 추가로 지정하면됩니다. 그렇지 않으면 기본 NFC-Tag 앱이 실행됩니다.

1

태그가 NDEF 형식으로 정의되어 있어야합니다. 따라서 읽히는 태그가 NDEF 형식 인 경우에만 프로그램이 시작됩니다.

TAG_DISCOVERED 또는 TECH_DISCOVERED와 같은 일반적인 의도 필터를 사용해 볼 수 있습니다.

관련 문제