2012-03-22 3 views
2

Mifare 카드로 NFC 서비스를 사용할 때 인 텐트 필터를 사용하여 애플리케이션을 어떻게 직접여시겠습니까? 난 당신이 내가 같은 일을 할 수있는 Mifare1K의 분야를 설정했던 방법 만 확실하지 않다Mifare 카드에 대한 응용 프로그램 별 의도 필터는 어떻게 만듭니 까? (안드로이드)

<data android:mimeType="application/com.sticknotes.android"/> 

같은 P2P 연결을 위해 직접 특정 MIME 타입 사용하여 텐트 필터를 사용할 수 있다는 것을 알고. 아무도이 작업을 수행하는 방법에 대한 아이디어가 있습니까? 아니면 응용 프로그램 선택기 팝업으로 제한됩니까?

나는 능동적 인 장치 대 수동적 인 장치를 다루기 위해 완전히 별개의 활동을 만들 수 있다고 가정하지만이 모든 것을 하나의 활동으로 처리 할 수있는 방법이 무엇입니까 ??

+0

Mifare 카드에 반응하고 싶습니까? Mifare 카드에 무엇이 있습니까? 사용자 정의 유형의 NDEF 메시지입니까? –

답변

2

앱에 이미 Android Beam (P2P 연결)에서 작동하는 MIME 유형 "application/com.sticknotes.android"에 대한 인 텐트 필터가있는 경우 동일한 태그가 포함 된 태그 및 동일한 NDEF 메시지에서도 작동합니다 MIME 유형. Android Beam 및 태그 검색은 모두 수신/읽기 장치에 ACTION_NDEF_DISCOVERED 의도를 생성합니다.

MIFARE Classic 1K 태그에 이러한 NDEF 메시지를 쓰려면이 작업을 수행하는 간단한 응용 프로그램을 만들면됩니다. 이 응용 프로그램의 매니페스트 파일을 넣어에서 :

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> 
    <tech-list> 
    <tech>android.nfc.tech.MifareClassic</tech> 
    </tech-list> 
</resources> 

응용 프로그램의 Activity 넣어에서 :

onCreate(Bundle savedInstanceState) { 
    // put code here to set up your app 
    ... 

    // create NDEF message 
    String mime = "application/com.sticknotes.android"; 
    byte[] payload = ... ; // put your payload here 
    NdefRecord record = new NdefRecord(NdefRecord.TNF_MIME_MEDIA, mime.toBytes(), null, payload); 
    NdefMessage ndef = new NdefMessage(new NdefRecord[] {ndef}); 

    // write NDEF message 
    Intent intent = getIntent(); 
    if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction()) { 
    Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 
    NdefFormatable nf = NdefFormatable.get(tag); 
    if (nf != null) { 
     // tag not yet formatted with NDEF 
     try { 
     nf.connect(); 
     nf.format(ndef); 
     nf.close(); 
     } catch (IOException e) { 
     // tag communication error occurred 
     } 
    } else { 
     Ndef n = Ndef.get(tag); 
     if (n != null && n.isWritable()) { 
     // can write NDEF 
     try { 
      n.connect(); 
      n.writeNdefMessage(ndef); 
      n.close(); 
     } catch (IOException e) { 
      // tag communication error occurred 
     } 
     } 
    } 
    } 
} 

이 형식

<activity> 
... 
<intent-filter> 
    <action android:name="android.nfc.action.TECH_DISCOVERED"/> 
</intent-filter> 

<meta-data android:name="android.nfc.action.TECH_DISCOVERED" 
    android:resource="@xml/nfc_tech_filter" /> 
... 
</activity> 

그리고 프로젝트의 res/xml 폴더에 다음과 같은 내용의 파일 nfc_tech_filter.xml을 넣어 포맷되지 않은 (비어있는) MIFARE Classic 태그에 NDEF 메시지를 쓰거나 이미 NDEF로 포맷 된 태그를 덮어 씁니다. MIFARE Classic 이외의 다른 태그 유형을 쓰고 싶다면 그에 따라 nfc_tech_filter.xml을 조정하십시오.

+0

니스, 고마워! 이것은 완벽하게 작동했습니다! – codedawg82