2014-12-30 15 views
1

내 응용 프로그램에서 NFC를 사용하고 있는데 정상적으로 작동합니다. 그러나 내 앱만 실행되고 그 의도를 처리 할 다른 앱이 없는지 확인하고 싶습니다. 내 매니페스트 파일에 대한 코드입니다 :NFC가 발견되었을 때 특정 응용 프로그램 실행

<activity android:name="com.mypackage.name.BeamActivity"> 
    <intent-filter> 
     <action android:name="android.nfc.action.NDEF_DISCOVERED" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:mimeType="text/plain" /> 
    </intent-filter> 
</activity> 

가 나는 NFC 의도를 감지하고 나에게 의도 선택기를 제공하고 내 휴대 전화에서 다른 샘플 응용 프로그램을 가지고있다. 다음은 Manifest 파일에있는 코드입니다.

<activity android:name="com.package2.name.NFCStickyNotesActivity" android:label="Sticky Notes" > 
    <!-- Handle notes detected from outside our application --> 
    <intent-filter> 
     <action android:name="android.nfc.action.NDEF_DISCOVERED" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:mimeType="text/plain" /> 
    </intent-filter> 
</activity> 

내 앱이 다른 NFC 인 텐트를 처리 할 때 유일한 앱일 수 있습니다.

매니페스트 파일이나 코드에서 특정 작업을 수행해야하는지 확실하지 않습니다. 어떤 도움을 주셔서 감사합니다.

답변

2

의도 선택기를 사용하는 이유는 text/plain 데이터 형식에 대해 여러 활동이 등록되어 있기 때문입니다. 이는 일반적인 경우이므로 작업을 시작해야하는 NDEF 레코드에 대해 일반적인 데이터 형식을 사용하지 않아야합니다. 당신은이 문제를 극복하기 위해 두 가지 옵션이 있습니다

  1. 당신의 NDEF 레코드에 대한 NFC 포럼 외부 유형을 사용합니다 (이는 ThomasRS 이미 언급 한 것입니다). 이 메서드를 사용하면 응용 프로그램에만 의미가있는 사용자 지정 레코드 형식을 만들 수 있습니다. 그런 다음 활동을 등록 할 수 있습니다

    NdefRecord extRecord = NdefRecord.createExternal(
         "yourdomain.com", // your domain name 
         "yourtype",  // your type name 
         textBytes);  // payload 
    

    이 같은이 레코드에 발사 :

    <activity ...> 
        <intent-filter> 
         <action android:name="android.nfc.action.NDEF_DISCOVERED" /> 
         <category android:name="android.intent.category.DEFAULT" /> 
         <data android:scheme="vnd.android.nfc" android:host="ext" 
           android:pathPrefix="/yourdomain.com:yourtype" /> 
        </intent-filter> 
    </activity> 
    
  2. 이 같은과 (태그에 기록하거나 빔을 보내하기) 등의 기록을 만들 수 있습니다
  3. Android 애플리케이션 레코드 (AAR)를 사용하십시오. AAR은 NDEF_DISCOVERED 의도가 특정 패키지 이름의 앱에만 전달되도록합니다. 이 같은과 (태그에 기록하거나 빔을 보내하기) 등의 기록을 만들 수 있습니다 : 답장을

    NdefRecord appRecord = NdefRecord.createApplicationRecord(
         "com.yourdomain.yourapp"); 
    NdefRecord textRecord = NdefRecord.createTextRecord(
         "en",  // language code 
         "yourtext" // human-readable text); 
    NdefMessage msg = new NdefMessage(
         textRecord, 
         appRecord); // use the AAR as the *last* record in your NDEF message 
    
+0

대답 해 주셔서 감사합니다. 그것은 많은 의미가 있습니다. – programmerboy

0

자신의 도메인에 외부 유형 NDEF 레코드를 사용하고 앱에 해당 인 텐트 필터를 제공하십시오.

+0

감사합니다. 내가 정확히 무엇을 해야할지 잘 모르기 때문에 코드 스 니펫을 제공해 주시겠습니까? – programmerboy