Bu dokümanda, Android'de gerçekleştirdiğiniz temel NFC görevleri açıklanmaktadır. Bu kılavuzda, NFC verilerinin NDEF mesajları biçiminde nasıl gönderip alınacağı ve bu özellikleri destekleyen Android çerçeve API'leri açıklanmaktadır. NDEF olmayan verilerle çalışma konuları da dahil olmak üzere daha ileri düzey konular için Gelişmiş NFC konusuna bakın.
NDEF verileriyle ve Android'le çalışırken başlıca iki kullanım alanı vardır:
- Bir NFC etiketinden NDEF verilerini okuma
- Android BeamTM ile bir cihazdan diğerine NDEF mesajları gönderme
Bir NFC etiketinden NDEF verilerinin okunması, etiket dağıtım sistemi ile gerçekleştirilir. Bu sistem, keşfedilen NFC etiketlerini analiz eder, verileri uygun şekilde kategorilere ayırır ve kategorize edilmiş verilerle ilgilenen bir uygulamayı başlatır. Taranan NFC etiketini işlemek isteyen bir uygulama, amaç filtresi beyan edebilir ve verileri işlemeyi isteyebilir.
Android BeamTM özelliği, cihazların fiziksel olarak birbirine dokundurarak başka bir cihaza NDEF mesajı aktarmasına olanak tanır. NFC ile manuel cihaz keşfi veya eşleme işlemi gerekmediğinden bu etkileşim, veri göndermek için Bluetooth gibi diğer kablosuz teknolojilerden daha kolay bir yol sağlar. İki cihaz kapsama alanına girdiğinde bağlantı otomatik olarak başlatılır. Android Beam, bir dizi NFC API'si aracılığıyla kullanılabileceğinden tüm uygulamalar cihazlar arasında bilgi iletebilir. Örneğin, Kişiler, Tarayıcı ve YouTube uygulamaları kişileri, web sayfalarını ve videoları diğer cihazlarla paylaşmak için Android Beam'i kullanır.
Etiket gönderme sistemi
Android destekli cihazlar, cihazın Ayarlar menüsünde NFC devre dışı olmadığı sürece genellikle ekran kilidi açıkken NFC etiketleri arar. Android destekli bir cihaz bir NFC etiketi keşfettiğinde istenen davranış, kullanıcıya hangi uygulamayı kullanacağını sormadan en uygun etkinliğin amacı ele almasını sağlamaktır. Cihazlar NFC etiketlerini çok kısa bir mesafeden taradığından, kullanıcıların manuel olarak bir etkinlik seçmesi, cihazı etiketten uzaklaştırmaya ve bağlantıyı kesmeye zorlayabilir. Etkinliğinizi, yalnızca Etkinlik Seçici'nin görünmesini engellemek için önemli olduğu NFC etiketlerini işleyecek şekilde geliştirmeniz gerekir.
Android, bu hedefe ulaşmanıza yardımcı olmak için taranan NFC etiketlerini analiz eden, bunları ayrıştıran ve taranan verilerle ilgilenen uygulamaları bulmaya çalışan özel bir etiket dağıtma sistemi sağlar. Bunu aşağıdakileri yaparak yapar:
- NFC etiketini ayrıştırma ve etiketteki veri yükünü tanımlayan MIME türünü veya bir URI'yi bulma.
- MIME türü veya URI'yı ve yükü bir intent'e dahil etme. Bu ilk iki adım, NFC etiketleri MIME türleri ve URI'lerle nasıl eşlenir? bölümünde açıklanmıştır.
- Amaca dayalı bir etkinlik başlatır. Bu, NFC Etiketleri Uygulamalara Nasıl Dağıtılır? bölümünde açıklanmıştır.
NFC etiketleri MIME türleri ve URI'lerle nasıl eşlenir?
NFC uygulamalarınızı yazmaya başlamadan önce, farklı NFC etiket türlerini, etiket gönderme sisteminin NFC etiketlerini nasıl ayrıştırdığını ve etiket gönderme sisteminin bir NDEF mesajı algıladığında yaptığı özel işi anlamanız önemlidir. NFC etiketleri çok çeşitli teknolojilerden oluşur ve bu etiketlere birçok farklı şekilde veri yazılabilir. Android, NFC Forumu tarafından tanımlanan NDEF standardını en fazla destekleyen cihazdır.
NDEF verileri, bir veya daha fazla kayıt (NdefRecord
) içeren bir mesaja (NdefMessage
) kapsüllenir. Her NDEF kaydı, oluşturmak istediğiniz kayıt türünün spesifikasyonuna göre doğru şekilde biçimlendirilmiş olmalıdır. Android, NDEF verileri içermeyen diğer etiket türlerini de destekler. Bunları, android.nfc.tech
paketindeki sınıfları kullanarak çalışabilirsiniz. Bu teknolojiler hakkında daha fazla bilgi edinmek için Gelişmiş NFC konusuna bakın. Bu diğer tür etiketlerle çalışırken, etiketlerle iletişim kurmak için kendi protokol yığınınızı yazabilirsiniz. Bu nedenle, Android destekli cihazlar için geliştirme kolaylığı ve maksimum destek açısından mümkün olduğunda NDEF'yi kullanmanızı öneririz.
Not: Tüm NDEF teknik özelliklerini indirmek için NFC Forumu Spesifikasyonları ve Uygulama Belgeleri sitesine gidin ve NDEF kayıtlarının nasıl oluşturulacağına ilişkin örnekler için Yaygın NDEF kaydı türlerini oluşturma sayfasına göz atın.
Artık NFC etiketleri konusunda biraz bilgi sahibi olduğunuza göre, aşağıdaki bölümlerde Android'in NDEF biçimli etiketleri nasıl işlediği daha ayrıntılı olarak açıklanmaktadır. Android destekli bir cihaz, NDEF biçimli veriler içeren bir NFC etiketini taradığında, mesajı ayrıştırır ve verilerin MIME türünü veya tanımlayıcı URI'yı bulmaya çalışır. Sistem bunu yapmak için, NDEF mesajının tamamının nasıl yorumlanacağını belirlemek üzere NdefMessage
içindeki ilk NdefRecord
öğesini okur (bir NDEF mesajında birden fazla NDEF kaydı olabilir). İyi biçimlendirilmiş bir NDEF mesajında ilk NdefRecord
, aşağıdaki alanları içerir:
- 3 bit TNF (Tür Adı Biçimi)
- Değişken uzunluk türü alanının nasıl yorumlanacağını gösterir. Geçerli değerler Tablo 1'de açıklanmıştır.
- Değişken uzunluk türü
- Kaydın türünü açıklar.
TNF_WELL_KNOWN
kullanıyorsanız Kayıt Türü Tanımı'nı (RTD) belirtmek için bu alanı kullanın. Geçerli RTD değerleri Tablo 2'de açıklanmıştır. - Değişken uzunluk kimliği
- Kayıt için benzersiz bir tanımlayıcı. Bu alan sık kullanılmaz, ancak bir etiketi benzersiz bir şekilde tanımlamanız gerekiyorsa bunun için bir kimlik oluşturabilirsiniz.
- Değişken uzunlukta yük
- Okumak veya yazmak istediğiniz gerçek veri yükü. Bir NDEF mesajı birden fazla NDEF kaydı içerebilir. Bu nedenle, tam yükün NDEF mesajının ilk NDEF kaydında olduğunu varsaymayın.
Etiket gönderme sistemi, bir MIME türünü veya URI'yı NDEF mesajıyla eşlemeye çalışmak için TNF ve tür alanlarını kullanır. Başarılı olursa bu bilgileri gerçek yük ile birlikte bir ACTION_NDEF_DISCOVERED
amacının içine dahil eder. Bununla birlikte, etiket dağıtım sisteminin veri türünü ilk NDEF kaydına göre belirleyemediği durumlar vardır. Bu durum, NDEF verileri bir MIME türü veya URI ile eşlenemediğinde ya da NFC etiketi başlangıçta NDEF verisi içermediğinde ortaya çıkar. Böyle durumlarda, etiketin teknolojileri ve yükü hakkında bilgi içeren bir Tag
nesnesi, bunun yerine bir ACTION_TECH_DISCOVERED
amacının içine yerleştirilir.
Tablo 1'de, etiket dağıtım sisteminin TNF ve tür alanlarını MIME türleri veya URI'lerle nasıl eşlediği açıklanmaktadır. Ayrıca, hangi TNF'lerin bir MIME türü veya URI ile eşlenemeyeceğini açıklar.
Bu durumlarda, etiket gönderme sistemi ACTION_TECH_DISCOVERED
değerine geri döner.
Örneğin, etiket gönderme sistemi TNF_ABSOLUTE_URI
türünde bir kayıtla karşılaşırsa bu kaydın değişken uzunluk türü alanını bir URI ile eşler. Etiket gönderme sistemi, ACTION_NDEF_DISCOVERED
amacının veri alanındaki URI'yı etiketle ilgili yük gibi diğer bilgileri de içerir. Diğer yandan, TNF_UNKNOWN
türünde bir kayıtla karşılaşırsa bunun yerine etiketin teknolojilerini kapsayan bir amaç oluşturur.
Tür Adı Biçimi (TNF) | Eşleme |
---|---|
TNF_ABSOLUTE_URI |
Tür alanına dayalı URI. |
TNF_EMPTY |
ACTION_TECH_DISCOVERED değerine geri döner. |
TNF_EXTERNAL_TYPE |
Tür alanındaki URN'yi temel alan URI. URN, NDEF türü alanına kısaltılmış bir biçimde kodlanır: <domain_name>:<service_name> .
Android bunu şu biçimde bir URI ile eşler: vnd.android.nfc://ext/<domain_name>:<service_name> . |
TNF_MIME_MEDIA |
Tür alanına göre MIME türü. |
TNF_UNCHANGED |
İlk kayıtta geçersiz olduğu için ACTION_TECH_DISCOVERED değerine geri döner. |
TNF_UNKNOWN |
ACTION_TECH_DISCOVERED değerine geri döner. |
TNF_WELL_KNOWN |
Tür alanında ayarladığınız Kayıt Türü Tanımı'na (RTD) bağlı olarak MIME türü veya URI. Mevcut RTD'ler ve eşlemeleri hakkında daha fazla bilgi için Tablo 2'ye bakın. |
Kayıt Türü Tanımı (RTD) | Eşleme |
---|---|
RTD_ALTERNATIVE_CARRIER |
ACTION_TECH_DISCOVERED değerine geri döner. |
RTD_HANDOVER_CARRIER |
ACTION_TECH_DISCOVERED değerine geri döner. |
RTD_HANDOVER_REQUEST |
ACTION_TECH_DISCOVERED değerine geri döner. |
RTD_HANDOVER_SELECT |
ACTION_TECH_DISCOVERED değerine geri döner. |
RTD_SMART_POSTER |
Yükün ayrıştırılmasına dayalı URI. |
RTD_TEXT |
text/plain MIME türü. |
RTD_URI |
Yüke dayalı URI. |
NFC etiketleri uygulamalara nasıl dağıtılır?
Etiket gönderme sistemi, NFC etiketini ve tanımlayıcı bilgilerini kapsayan bir niyet oluşturmayı tamamladığında, niyeti, amaca göre filtreleyen ilgili bir uygulamaya gönderir. Amacı birden fazla uygulama gerçekleştirebiliyorsa kullanıcının Etkinliği seçebilmesi için Etkinlik Seçici sunulur. Etiket gönderme sistemi, en yüksek önceliğe sahip olandan en düşük öncelikli olana doğru sıralanmış üç amaç tanımlar:
-
ACTION_NDEF_DISCOVERED
: Bu amaç, NDEF yükü içeren ve tanınan bir türde olan bir etiket tarandığında bir Etkinlik başlatmak için kullanılır. Bu, en yüksek öncelikli amaçtır ve etiket dağıtma sistemi, mümkün olduğunda başka bir amaçtan önce bu amaçla bir Etkinlik başlatmaya çalışır. ACTION_TECH_DISCOVERED
:ACTION_NDEF_DISCOVERED
amacını işlemek için hiçbir etkinlik kaydedilmemişse etiket dağıtım sistemi bu amaçla bir uygulama başlatmaya çalışır. Taranan etiket bir MIME türü veya URI ile eşlenemeyen NDEF verileri içeriyorsa ya da etiket NDEF verisi içermiyorsa ancak bilinen bir etiket teknolojisine sahipse bu amaç doğrudan başlatılır (önceACTION_NDEF_DISCOVERED
başlatılmadan).ACTION_TAG_DISCOVERED
:ACTION_NDEF_DISCOVERED
veyaACTION_TECH_DISCOVERED
amaçlarını hiçbir etkinlik gerçekleştirmezse bu amaç başlatılır.
Etiket gönderme sisteminin temel çalışma şekli şöyledir:
- NFC etiketini ayrıştırırken etiket gönderme sistemi (
ACTION_NDEF_DISCOVERED
veyaACTION_TECH_DISCOVERED
) tarafından oluşturulan bir Etkinlik başlatmayı deneyin. - Söz konusu amaç için hiçbir etkinlik filtrelenmiyorsa bir uygulama amaca göre filtrelenene veya etiket dağıtma sistemi olası tüm amaçları deneyene kadar sonraki en düşük öncelikli niyetle (
ACTION_TECH_DISCOVERED
veyaACTION_TAG_DISCOVERED
) bir Etkinlik başlatmayı deneyin. - Amaçların hiçbiri için hiçbir uygulama filtrelenmiyorsa hiçbir şey yapmayın.
Mümkün olduğunda NDEF mesajları ve ACTION_NDEF_DISCOVERED
amacı ile çalışın çünkü bu üçü arasından en spesifik olanıdır. Bu amaç, uygulamanızı diğer iki amaçtan daha uygun bir zamanda başlatmanıza olanak sağlar ve kullanıcıya daha iyi bir deneyim sunar.
Android manifest dosyasında NFC erişimi isteme
Bir cihazın NFC donanımına erişmeden ve NFC amaçlarını düzgün bir şekilde işlemeden önce AndroidManifest.xml
dosyanızda şu öğeleri tanımlayın:
- NFC donanımına erişmek için NFC
<uses-permission>
öğesi:<uses-permission android:name="android.permission.NFC" />
- Uygulamanızın destekleyebileceği minimum SDK sürümü. API düzey 9,
ACTION_TAG_DISCOVERED
aracılığıyla yalnızca sınırlı etiket dağıtımını destekler ve NDEF mesajlarına yalnızcaEXTRA_NDEF_MESSAGES
ekstrası üzerinden erişim verir. Başka etiket özelliklerine veya G/Ç işlemlerine erişilemez. API düzeyi 10, ön plan NDEF aktarmanın yanı sıra kapsamlı okuyucu/yazar desteği içerir. API düzeyi 14 ise Android Beam ile NDEF mesajlarını diğer cihazlara aktarmak için daha kolay bir yol ve NDEF kayıtları oluşturmak için ekstra kolaylık yöntemleri sunar.<uses-sdk android:minSdkVersion="10"/>
- Uygulamanızın Google Play'de yalnızca NFC donanımına sahip cihazlarda gösterilmesini sağlayan
uses-feature
öğesi:<uses-feature android:name="android.hardware.nfc" android:required="true" />
Uygulamanız NFC işlevini kullanıyorsa ancak bu işlev uygulamanız için önemli değilse
uses-feature
öğesini çıkarabilir ve çalışma zamanındagetDefaultAdapter()
öğesininnull
olup olmadığını kontrol ederek NFC kullanılabilirliğini kontrol edebilirsiniz.
NFC amaçları için filtrele
İşlemek istediğiniz bir NFC etiketi tarandığında uygulamanızı başlatmak için uygulamanız, Android manifest dosyasındaki NFC amaçlarının birini, ikisini veya üçüne göre filtreleme yapabilir. Ancak uygulamanızın ne zaman başlayacağını en iyi şekilde kontrol edebilmek için genellikle ACTION_NDEF_DISCOVERED
amacına göre filtreleme yapmak istersiniz. ACTION_TECH_DISCOVERED
amacı, hiçbir uygulama ACTION_NDEF_DISCOVERED
için filtre uygulamadığında veya yük NDEF olmadığında ACTION_NDEF_DISCOVERED
için yedektir. ACTION_TAG_DISCOVERED
için yapılan filtreleme, genellikle filtre uygulayamayacak kadar genel bir kategoridir. Birçok uygulama ACTION_TAG_DISCOVERED
tarihinden önce ACTION_NDEF_DISCOVERED
veya ACTION_TECH_DISCOVERED
için filtrelendiğinden uygulamanızın başlama olasılığı düşüktür. ACTION_TAG_DISCOVERED
, yalnızca ACTION_NDEF_DISCOVERED
veya ACTION_TECH_DISCOVERED
amacını yerine getirecek başka bir uygulamanın yüklenmediği durumlarda, uygulamaların filtrelenmesi için son çare olarak kullanılabilir.
NFC etiketi dağıtımları değişiklik gösterdiği ve çoğu zaman sizin kontrolünüz altında olmadığından bu her zaman mümkün değildir. Bu nedenle, gerektiğinde diğer iki amaca geri dönebilirsiniz. Yazılan etiketlerin ve verilerin türünü kontrolünüz altında olduğunda etiketlerinizi biçimlendirmek için NDEF'yi kullanmanız önerilir. Aşağıdaki bölümlerde, her amaç türü için nasıl filtreleme yapacağınız açıklanmaktadır.
ACTION_NDEF_DISCOVERED
ACTION_NDEF_DISCOVERED
amaçlarını filtrelemek için filtre uygulamak istediğiniz veri türüyle birlikte amaç filtresini de bildirin. Aşağıdaki örnekte ACTION_NDEF_DISCOVERED
amaçları text/plain
MIME türünde filtreler:
<intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="text/plain" /> </intent-filter>
Aşağıdaki örnek, https://developer.android.com/index.html
biçimindeki bir URI için filtre uygular.
<intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED"/> <category android:name="android.intent.category.DEFAULT"/> <data android:scheme="https" android:host="developer.android.com" android:pathPrefix="/index.html" /> </intent-filter>
ACTION_TECH_DISCOVERED (İşlem)
Etkinliğiniz ACTION_TECH_DISCOVERED
amacı için filtre uyguluyorsa bir tech-list
grubunda etkinliğinizin desteklediği teknolojileri belirten bir XML kaynak dosyası oluşturmanız gerekir. Bir tech-list
grubu, etiket tarafından desteklenen teknolojilerin bir alt kümesiyse ve getTechList()
yöntemini çağırarak etkinliğiniz eşleşme olarak kabul edilir.
Örneğin, taranan etiket Mifare Classic, NdefFormatable ve NfcA'yı destekliyorsa tech-list
ayarınız, etkinliğinizin eşleştirilebilmesi için bu teknolojilerden üçünü, ikisini veya birini (ve başka hiçbir şeyi değil) belirtmelidir.
Aşağıdaki örnekte tüm teknolojiler tanımlanmaktadır. NFC etiketinizin desteklemediğini
kaldırmanız gerekir. Bu dosyayı <project-root>/res/xml
klasörüne kaydedin (istediğiniz adı verebilirsiniz).
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <tech-list> <tech>android.nfc.tech.IsoDep</tech> <tech>android.nfc.tech.NfcA</tech> <tech>android.nfc.tech.NfcB</tech> <tech>android.nfc.tech.NfcF</tech> <tech>android.nfc.tech.NfcV</tech> <tech>android.nfc.tech.Ndef</tech> <tech>android.nfc.tech.NdefFormatable</tech> <tech>android.nfc.tech.MifareClassic</tech> <tech>android.nfc.tech.MifareUltralight</tech> </tech-list> </resources>
Ayrıca birden fazla tech-list
grubu da belirtebilirsiniz. tech-list
gruplarının her biri bağımsız olarak değerlendirilir ve tek bir tech-list
kümesi getTechList()
tarafından döndürülen teknolojilerin alt kümesiyse etkinliğiniz eşleşme olarak kabul edilir. Bu, eşleştirme teknolojileri için AND
ve OR
anlamları sağlar. Aşağıdaki örnek, NfcA ve Ndef teknolojilerini destekleyebilen veya NfcB ve Ndef teknolojilerini destekleyebilen etiketlerle eşleşmektedir:
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <tech-list> <tech>android.nfc.tech.NfcA</tech> <tech>android.nfc.tech.Ndef</tech> </tech-list> <tech-list> <tech>android.nfc.tech.NfcB</tech> <tech>android.nfc.tech.Ndef</tech> </tech-list> </resources>
AndroidManifest.xml
dosyanızda, aşağıdaki örnekte gösterildiği gibi <activity>
öğesinin içindeki <meta-data>
öğesinde oluşturduğunuz kaynak dosyayı belirtin:
<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>
Etiket teknolojileriyle çalışma ve ACTION_TECH_DISCOVERED
amacı hakkında daha fazla bilgi için Gelişmiş NFC dokümanındaki Desteklenen Etiket Teknolojileriyle Çalışma bölümüne bakın.
ACTION_TAG_DISCOVERED
ACTION_TAG_DISCOVERED
için filtreleme yapmak üzere aşağıdaki amaç filtresini kullanın:
<intent-filter> <action android:name="android.nfc.action.TAG_DISCOVERED"/> </intent-filter>
Amaçlardan bilgi elde etme
Bir etkinlik NFC amacı nedeniyle başlarsa taranan NFC etiketi ile ilgili bilgileri amaçtan edinebilirsiniz. Intent'ler, taranan etikete bağlı olarak aşağıdaki ekstraları içerebilir:
EXTRA_TAG
(gerekli): Taranan etiketi temsil eden birTag
nesnesi.EXTRA_NDEF_MESSAGES
(isteğe bağlı): Etiketten ayrıştırılan NDEF mesajları dizisi. Bu ek özellik,ACTION_NDEF_DISCOVERED
amaçları için zorunludur.EXTRA_ID
(isteğe bağlı): Etiketin alt düzey kimliği.
Bu ekstraları elde etmek için etkinliğinizin NFC amaçlarından biriyle başlatılıp başlatılmadığını kontrol ederek bir etiketin tarandığından emin olun ve ardından ekstraları amaçtan çıkarın. Aşağıdaki örnek, ACTION_NDEF_DISCOVERED
amacını kontrol eder ve NDEF mesajlarını ekstra bir intent'den alır.
Kotlin
override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) ... if (NfcAdapter.ACTION_NDEF_DISCOVERED == intent.action) { intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)?.also { rawMessages -> val messages: List<NdefMessage> = rawMessages.map { it as NdefMessage } // Process the messages array. ... } } }
Java
@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); ... if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) { Parcelable[] rawMessages = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); if (rawMessages != null) { NdefMessage[] messages = new NdefMessage[rawMessages.length]; for (int i = 0; i < rawMessages.length; i++) { messages[i] = (NdefMessage) rawMessages[i]; } // Process the messages array. ... } } }
Alternatif olarak amaçtan bir Tag
nesnesi elde edebilirsiniz. Bu nesne, yükü içerir ve etiketin teknolojilerini numaralandırmanıza olanak tanır:
Kotlin
val tag: Tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG)
Java
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
Yaygın NDEF kaydı türlerini oluşturma
Bu bölümde, NFC etiketlerine yazarken veya Android Beam ile veri gönderirken size yardımcı olacak yaygın NDEF kaydı türlerinin nasıl oluşturulacağı açıklanmaktadır. Android 4.0 (API düzeyi 14) sürümünden itibaren, URI kayıtlarını otomatik olarak oluşturmanıza yardımcı olmak için createUri()
yöntemi kullanılabilir. Android 4.1'den (API düzeyi 16) itibaren createExternal()
ve createMime()
, MIME ve harici türde NDEF kayıtları oluşturmanıza yardımcı olmak için kullanılabilir. NDEF kayıtlarını manuel olarak oluştururken hatalardan kaçınmak için mümkün olduğunda bu yardımcı yöntemleri kullanın.
Bu bölümde, kayda karşılık gelen amaç filtresinin nasıl oluşturulacağı da açıklanmaktadır. Bu NDEF kaydı örneklerinin tümü, bir etikete yazdığınız veya ışınlamaya çalıştığınız NDEF mesajının ilk NDEF kaydında olmalıdır.
TNF_ABSOLUTE_URI
Not: Daha verimli olduğu için TNF_ABSOLUTE_URI
yerine RTD_URI
türünü kullanmanızı öneririz.
TNF_ABSOLUTE_URI
NDEF kaydını aşağıdaki şekilde oluşturabilirsiniz:
Kotlin
val uriRecord = ByteArray(0).let { emptyByteArray -> NdefRecord( TNF_ABSOLUTE_URI, "https://developer.android.com/index.html".toByteArray(Charset.forName("US-ASCII")), emptyByteArray, emptyByteArray ) }
Java
NdefRecord uriRecord = new NdefRecord( NdefRecord.TNF_ABSOLUTE_URI , "https://developer.android.com/index.html".getBytes(Charset.forName("US-ASCII")), new byte[0], new byte[0]);
Önceki NDEF kaydının amaç filtresi şöyle görünür:
<intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="https" android:host="developer.android.com" android:pathPrefix="/index.html" /> </intent-filter>
TNF_MIME_MEDIA
TNF_MIME_MEDIA
NDEF kaydını aşağıdaki yöntemlerle oluşturabilirsiniz:
createMime()
yöntemini kullanarak:
Kotlin
val mimeRecord = NdefRecord.createMime( "application/vnd.com.example.android.beam", "Beam me up, Android".toByteArray(Charset.forName("US-ASCII")) )
Java
NdefRecord mimeRecord = NdefRecord.createMime("application/vnd.com.example.android.beam", "Beam me up, Android".getBytes(Charset.forName("US-ASCII")));
NdefRecord
öğesi manuel olarak oluşturuluyor:
Kotlin
val mimeRecord = Charset.forName("US-ASCII").let { usAscii -> NdefRecord( NdefRecord.TNF_MIME_MEDIA, "application/vnd.com.example.android.beam".toByteArray(usAscii), ByteArray(0), "Beam me up, Android!".toByteArray(usAscii) ) }
Java
NdefRecord mimeRecord = new NdefRecord( NdefRecord.TNF_MIME_MEDIA , "application/vnd.com.example.android.beam".getBytes(Charset.forName("US-ASCII")), new byte[0], "Beam me up, Android!".getBytes(Charset.forName("US-ASCII")));
Önceki NDEF kaydının amaç filtresi şöyle görünür:
<intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="application/vnd.com.example.android.beam" /> </intent-filter>
RTD_TEXT ile TNF_WELL_KNOWN
TNF_WELL_KNOWN
NDEF kaydını aşağıdaki şekilde oluşturabilirsiniz:
Kotlin
fun createTextRecord(payload: String, locale: Locale, encodeInUtf8: Boolean): NdefRecord { val langBytes = locale.language.toByteArray(Charset.forName("US-ASCII")) val utfEncoding = if (encodeInUtf8) Charset.forName("UTF-8") else Charset.forName("UTF-16") val textBytes = payload.toByteArray(utfEncoding) val utfBit: Int = if (encodeInUtf8) 0 else 1 shl 7 val status = (utfBit + langBytes.size).toChar() val data = ByteArray(1 + langBytes.size + textBytes.size) data[0] = status.toByte() System.arraycopy(langBytes, 0, data, 1, langBytes.size) System.arraycopy(textBytes, 0, data, 1 + langBytes.size, textBytes.size) return NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, ByteArray(0), data) }
Java
public NdefRecord createTextRecord(String payload, Locale locale, boolean encodeInUtf8) { byte[] langBytes = locale.getLanguage().getBytes(Charset.forName("US-ASCII")); Charset utfEncoding = encodeInUtf8 ? Charset.forName("UTF-8") : Charset.forName("UTF-16"); byte[] textBytes = payload.getBytes(utfEncoding); int utfBit = encodeInUtf8 ? 0 : (1 << 7); char status = (char) (utfBit + langBytes.length); byte[] data = new byte[1 + langBytes.length + textBytes.length]; data[0] = (byte) status; System.arraycopy(langBytes, 0, data, 1, langBytes.length); System.arraycopy(textBytes, 0, data, 1 + langBytes.length, textBytes.length); NdefRecord record = new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, new byte[0], data); return record; }
Önceki NDEF kaydının amaç filtresi şöyle görünür:
<intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter>
RTD_URI ile TNF_WELL_KNOWN
TNF_WELL_KNOWN
NDEF kaydını aşağıdaki yöntemlerle oluşturabilirsiniz:
createUri(String)
yöntemini kullanarak:
Kotlin
val rtdUriRecord1 = NdefRecord.createUri("https://example.com")
Java
NdefRecord rtdUriRecord1 = NdefRecord.createUri("https://example.com");
createUri(Uri)
yöntemini kullanarak:
Kotlin
val rtdUriRecord2 = Uri.parse("https://example.com").let { uri -> NdefRecord.createUri(uri) }
Java
Uri uri = Uri.parse("https://example.com"); NdefRecord rtdUriRecord2 = NdefRecord.createUri(uri);
NdefRecord
öğesi manuel olarak oluşturuluyor:
Kotlin
val uriField = "example.com".toByteArray(Charset.forName("US-ASCII")) val payload = ByteArray(uriField.size + 1) //add 1 for the URI Prefix payload [0] = 0x01 //prefixes https://www. to the URI System.arraycopy(uriField, 0, payload, 1, uriField.size) //appends URI to payload val rtdUriRecord = NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_URI, ByteArray(0), payload)
Java
byte[] uriField = "example.com".getBytes(Charset.forName("US-ASCII")); byte[] payload = new byte[uriField.length + 1]; //add 1 for the URI Prefix payload[0] = 0x01; //prefixes https://www. to the URI System.arraycopy(uriField, 0, payload, 1, uriField.length); //appends URI to payload NdefRecord rtdUriRecord = new NdefRecord( NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_URI, new byte[0], payload);
Önceki NDEF kaydının amaç filtresi şöyle görünür:
<intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="https" android:host="example.com" android:pathPrefix="" /> </intent-filter>
TNF_EXTERNAL_TYPE
TNF_EXTERNAL_TYPE
NDEF kaydını aşağıdaki yöntemlerle oluşturabilirsiniz:
createExternal()
yöntemini kullanarak:
Kotlin
var payload: ByteArray //assign to your data val domain = "com.example" //usually your app's package name val type = "externalType" val extRecord = NdefRecord.createExternal(domain, type, payload)
Java
byte[] payload; //assign to your data String domain = "com.example"; //usually your app's package name String type = "externalType"; NdefRecord extRecord = NdefRecord.createExternal(domain, type, payload);
NdefRecord
öğesi manuel olarak oluşturuluyor:
Kotlin
var payload: ByteArray ... val extRecord = NdefRecord( NdefRecord.TNF_EXTERNAL_TYPE, "com.example:externalType".toByteArray(Charset.forName("US-ASCII")), ByteArray(0), payload )
Java
byte[] payload; ... NdefRecord extRecord = new NdefRecord( NdefRecord.TNF_EXTERNAL_TYPE, "com.example:externalType".getBytes(Charset.forName("US-ASCII")), new byte[0], payload);
Önceki NDEF kaydının amaç filtresi şöyle görünür:
<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="/com.example:externalType"/> </intent-filter>
Hem Android destekli hem de Android olmayan cihazları daha iyi desteklemek amacıyla daha genel NFC etiketi dağıtımları için TNF_EXTERNAL_TYPE
kullanın.
Not: TNF_EXTERNAL_TYPE
için URN'lerin standart biçimi urn:nfc:ext:example.com:externalType
şeklindedir ancak NFC Forum RTD spesifikasyonunda, URN'nin urn:nfc:ext:
bölümünün NDEF kaydından çıkarılması gerektiği belirtilmektedir. Yani yalnızca iki nokta ile ayrılmış alan adı (örnekte example.com
) ve türdür (örnekte externalType
).
TNF_EXTERNAL_TYPE
gönderilirken Android, urn:nfc:ext:example.com:externalType
URN'sini vnd.android.nfc://ext/example.com:externalType
URI'sına dönüştürür. Bu, örnekteki amaç filtresinde belirtildiği şekildedir.
Android uygulaması kayıtları
Android 4.0'da (API düzeyi 14) kullanıma sunulan Android Uygulama Kaydı (AAR), bir NFC etiketi tarandığında uygulamanızın başlatıldığına dair daha güçlü bir kesinlik sağlar. AAR, NDEF kaydı içine yerleştirilmiş bir uygulamanın paket adını içerir. Android, NDEF mesajının tamamında AAR'leri aradığı için NDEF mesajınızın herhangi bir NDEF kaydına AAR ekleyebilirsiniz. Bir AAR bulursa uygulamayı AAR'deki paket adına göre başlatır. Uygulama cihazda yoksa Google Play başlatılır ve uygulamanın indirilmesi sağlanır.
AAR'ler, diğer uygulamaların aynı amaç için filtreleme yapmasını ve dağıttığınız belirli etiketleri potansiyel olarak işlemesini önlemek istiyorsanız kullanışlıdır. AAR'ler, paket adı kısıtlaması nedeniyle yalnızca uygulama düzeyinde desteklenir. Amaç filtrelemesinde olduğu gibi Etkinlik düzeyinde desteklenmez. Bir niyeti Etkinlik düzeyinde işlemek istiyorsanız amaç filtrelerini kullanın.
Bir etiket AAR içeriyorsa etiket gönderme sistemi aşağıdaki şekilde gönderir:
- Normalde amaç filtresi kullanarak bir Etkinlik başlatmayı deneyin. Amaçla eşleşen Etkinlik AAR ile de eşleşiyorsa Etkinliği başlatın.
- Niyet için filtreleyen Etkinlik AAR ile eşleşmiyorsa, amacı birden fazla Etkinlik gerçekleştirebiliyorsa veya niyeti hiçbir Etkinlik gerçekleştirmiyorsa AAR tarafından belirtilen uygulamayı başlatın.
- Hiçbir uygulama AAR ile başlayamazsa Google Play'e giderek AAR'ye dayanan uygulamayı indirin.
Not: AAR'leri ve niyet gönderme sistemini ön plan dağıtım sistemi ile geçersiz kılabilirsiniz. Bu sistem, bir NFC etiketi bulunduğunda ön plan etkinliğine öncelik verilmesini sağlar. Bu yöntemle, AAR'leri ve niyet gönderme sistemini geçersiz kılmak için etkinliğin ön planda olması gerekir.
AAR içermeyen taranmış etiketleri yine de filtrelemek istiyorsanız niyet filtrelerini normal olarak tanımlayabilirsiniz. Uygulamanız AAR içermeyen diğer etiketlerle ilgileniyorsa bu yararlı olur. Örneğin, uygulamanızın dağıttığınız özel etiketlerin yanı sıra üçüncü taraflarca dağıtılan genel etiketleri de işleyeceğini garanti etmek isteyebilirsiniz. AAR'lerin, Android 4.0 veya sonraki sürümlerin yüklü olduğu cihazlara özel olduğunu unutmayın. Bu nedenle, etiketleri dağıtırken en geniş cihaz yelpazesini desteklemek için AAR'ler ve MIME türlerinin/URI'larının bir kombinasyonunu kullanmak isteyebilirsiniz. Buna ek olarak, NFC etiketlerini dağıtırken çoğu cihazda (Android destekli ve diğer cihazlar) desteği sağlamak için NFC etiketlerinizi nasıl yazmak istediğinizi düşünün. Uygulamaların ayırt etmesini kolaylaştırmak için nispeten benzersiz bir MIME türü veya URI tanımlayarak bunu yapabilirsiniz.
Android, AAR oluşturmak için basit bir API (createApplicationRecord()
) sağlar. Tek yapmanız gereken AAR'yi NdefMessage
içinde herhangi bir yere yerleştirmektir. NdefMessage
içindeki tek kayıt AAR olmadığı sürece NdefMessage
işleminizin ilk kaydını kullanmak istemezsiniz. Bunun nedeni, Android sisteminin etiketin MIME türünü veya URI'sını belirlemek için ilk NdefMessage
kaydını kontrol etmesidir. Etiketin URI'si, uygulamaların filtreleneceği bir amaç oluşturur. Aşağıdaki kodda AAR'nin nasıl oluşturulacağı gösterilmektedir:
Kotlin
val msg = NdefMessage( arrayOf( ..., NdefRecord.createApplicationRecord("com.example.android.beam") ) )
Java
NdefMessage msg = new NdefMessage( new NdefRecord[] { ..., NdefRecord.createApplicationRecord("com.example.android.beam")} ); )
NDEF mesajlarını diğer cihazlara gönderme
Android Beam, Android destekli iki cihaz arasında eşler arası basit veri alışverişi yapılmasına olanak tanır. Verileri başka bir cihaza ışınlamak isteyen uygulama ön planda olmalı ve verileri alan cihaz kilitli olmamalıdır. Işınlama cihazı, alma cihazıyla yeterince yakın olduğunda, ışın verme cihazı "Touch to Işınlama" kullanıcı arayüzünü görüntüler. Kullanıcı bunun ardından mesajın alıcı cihaza ışınlanıp gönderilmeyeceğini seçebilir.
Not: Ön plan NDEF aktarma işlemi, Android Beam'e benzer işlevler sağlayan API düzeyi 10'da kullanılabiliyordu. Bu API'ler artık kullanımdan kaldırılmıştır, ancak eski cihazları desteklemek için kullanılabilirler. Daha fazla bilgi için enableForegroundNdefPush()
dokümanına bakın.
Aşağıdaki iki yöntemden birini çağırarak uygulamanız için Android Beam'i etkinleştirebilirsiniz:
setNdefPushMessage()
: Işınlanacak mesaj olarak ayarlamak için birNdefMessage
kabul eder. İki cihaz yeterince yakında olduğunda mesajı otomatik olarak ışınlar.setNdefPushMessageCallback()
: Bir cihaz, verilerin ışınlanacağı kapsama alanında olduğunda çağrılancreateNdefMessage()
ifadesini içeren bir geri çağırmayı kabul eder. Geri çağırma, NDEF mesajını yalnızca gerektiğinde oluşturmanızı sağlar.
Bir etkinlik aynı anda yalnızca bir NDEF mesajı aktarabilir. Bu nedenle, her ikisi de ayarlanmışsa setNdefPushMessageCallback()
, setNdefPushMessage()
mesajına göre öncelikli olur. Android Beam'i kullanmak için aşağıdaki genel yönergelere uymanız gerekir:
- Verileri ışınlayan etkinlik ön planda olmalıdır. Her iki cihazın da ekranlarının kilidi açık olmalıdır.
- Işınladığınız verileri bir
NdefMessage
nesnesine kapsüllemeniz gerekir. - Işınlama verilerini alan NFC cihazı,
com.android.npp
NDEF aktarma protokolünü veya NFC Forumu'nun SNEP'sini (Basit NDEF Değişim Protokolü) desteklemelidir. API düzeyi 9 (Android 2.3) ile API düzeyi 13 (Android 3.2) arasındaki cihazlar içincom.android.npp
protokolü gereklidir. Hemcom.android.npp
hem de SNEP, API düzeyi 14 (Android 4.0) ve sonraki sürümlerde gereklidir.
Not: Etkinliğiniz Android Beam'i etkinleştiriyorsa ve ön plandaysa standart amaç dağıtım sistemi devre dışı bırakılır. Bununla birlikte, etkinliğiniz ön plan gönderim özelliğini de etkinleştirse bile, ön plan dağıtımında ayarlanan amaç filtreleriyle eşleşen etiketleri tarayabilir.
Android Beam'i etkinleştirmek için:
- Diğer cihaza aktarmak istediğiniz
NdefRecord
öğelerini içeren birNdefMessage
oluşturun. setNdefPushMessage()
yöntemini birNdefMessage
ile çağırın veya etkinliğinizinonCreate()
yöntemindeki birNfcAdapter.CreateNdefMessageCallback
nesnesinde geçensetNdefPushMessageCallback
yöntemini çağırın. Bu yöntemlerde, Android Beam ile etkinleştirmek istediğiniz en az bir etkinlik ve etkinleştirilecek diğer etkinliklerin isteğe bağlı bir listesi gerekir.Normalde, Etkinliğinizin yalnızca her zaman aynı NDEF mesajını, iki cihaz iletişim kurmak için kapsama alanındayken aktarması gerekiyorsa
setNdefPushMessage()
kullanırsınız. Uygulamanız, uygulamanın mevcut bağlamına önem veriyorsa ve kullanıcının uygulamanızda ne yaptığına bağlı olarak bir NDEF mesajı aktarmak istiyorsasetNdefPushMessageCallback
kullanırsınız.
Aşağıdaki örnekte basit bir etkinliğin, bir etkinliğin onCreate()
yönteminde NfcAdapter.CreateNdefMessageCallback
yöntemini nasıl çağırdığı gösterilmektedir (tam örnek için AndroidBeamDemo bölümüne bakın). Bu örnekte, MIME kaydı oluşturmanıza yardımcı olacak yöntemler de bulunmaktadır:
Kotlin
package com.example.android.beam import android.app.Activity import android.content.Intent import android.nfc.NdefMessage import android.nfc.NdefRecord import android.nfc.NfcAdapter import android.nfc.NfcAdapter.CreateNdefMessageCallback import android.nfc.NfcEvent import android.os.Bundle import android.os.Parcelable import android.widget.TextView import android.widget.Toast import java.nio.charset.Charset class Beam : Activity(), NfcAdapter.CreateNdefMessageCallback { private var nfcAdapter: NfcAdapter? = null private lateinit var textView: TextView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) textView = findViewById(R.id.textView) // Check for available NFC Adapter nfcAdapter = NfcAdapter.getDefaultAdapter(this) if (nfcAdapter == null) { Toast.makeText(this, "NFC is not available", Toast.LENGTH_LONG).show() finish() return } // Register callback nfcAdapter?.setNdefPushMessageCallback(this, this) } override fun createNdefMessage(event: NfcEvent): NdefMessage { val text = "Beam me up, Android!\n\n" + "Beam Time: " + System.currentTimeMillis() return NdefMessage( arrayOf( createMime("application/vnd.com.example.android.beam", text.toByteArray()) ) /** * The Android Application Record (AAR) is commented out. When a device * receives a push with an AAR in it, the application specified in the AAR * is guaranteed to run. The AAR overrides the tag dispatch system. * You can add it back in to guarantee that this * activity starts when receiving a beamed message. For now, this code * uses the tag dispatch system. *///,NdefRecord.createApplicationRecord("com.example.android.beam") ) } override fun onResume() { super.onResume() // Check to see that the Activity started due to an Android Beam if (NfcAdapter.ACTION_NDEF_DISCOVERED == intent.action) { processIntent(intent) } } override fun onNewIntent(intent: Intent) { // onResume gets called after this to handle the intent setIntent(intent) } /** * Parses the NDEF Message from the intent and prints to the TextView */ private fun processIntent(intent: Intent) { textView = findViewById(R.id.textView) // only one message sent during the beam intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)?.also { rawMsgs -> (rawMsgs[0] as NdefMessage).apply { // record 0 contains the MIME type, record 1 is the AAR, if present textView.text = String(records[0].payload) } } } }
Java
package com.example.android.beam; import android.app.Activity; import android.content.Intent; import android.nfc.NdefMessage; import android.nfc.NdefRecord; import android.nfc.NfcAdapter; import android.nfc.NfcAdapter.CreateNdefMessageCallback; import android.nfc.NfcEvent; import android.os.Bundle; import android.os.Parcelable; import android.widget.TextView; import android.widget.Toast; import java.nio.charset.Charset; public class Beam extends Activity implements CreateNdefMessageCallback { NfcAdapter nfcAdapter; TextView textView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView textView = (TextView) findViewById(R.id.textView); // Check for available NFC Adapter nfcAdapter = NfcAdapter.getDefaultAdapter(this); if (nfcAdapter == null) { Toast.makeText(this, "NFC is not available", Toast.LENGTH_LONG).show(); finish(); return; } // Register callback nfcAdapter.setNdefPushMessageCallback(this, this); } @Override public NdefMessage createNdefMessage(NfcEvent event) { String text = ("Beam me up, Android!\n\n" + "Beam Time: " + System.currentTimeMillis()); NdefMessage msg = new NdefMessage( new NdefRecord[] { createMime( "application/vnd.com.example.android.beam", text.getBytes()) /** * The Android Application Record (AAR) is commented out. When a device * receives a push with an AAR in it, the application specified in the AAR * is guaranteed to run. The AAR overrides the tag dispatch system. * You can add it back in to guarantee that this * activity starts when receiving a beamed message. For now, this code * uses the tag dispatch system. */ //,NdefRecord.createApplicationRecord("com.example.android.beam") }); return msg; } @Override public void onResume() { super.onResume(); // Check to see that the Activity started due to an Android Beam if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) { processIntent(getIntent()); } } @Override public void onNewIntent(Intent intent) { // onResume gets called after this to handle the intent setIntent(intent); } /** * Parses the NDEF Message from the intent and prints to the TextView */ void processIntent(Intent intent) { textView = (TextView) findViewById(R.id.textView); Parcelable[] rawMsgs = intent.getParcelableArrayExtra( NfcAdapter.EXTRA_NDEF_MESSAGES); // only one message sent during the beam NdefMessage msg = (NdefMessage) rawMsgs[0]; // record 0 contains the MIME type, record 1 is the AAR, if present textView.setText(new String(msg.getRecords()[0].getPayload())); } }
Bu kodun bir AAR'yi yorumladığını unutmayın. Bunu kaldırabilirsiniz. AAR'yi etkinleştirirseniz AAR'de belirtilen uygulama her zaman Android Beam mesajını alır. Uygulama mevcut değilse Google Play tarafından indirilmeye başlanır. Bu nedenle, AAR kullanılıyorsa Android 4.0 veya sonraki sürümlerin yüklü olduğu cihazlar için aşağıdaki intent filtresi teknik olarak gerekli değildir:
<intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="application/vnd.com.example.android.beam"/> </intent-filter>
Bu intent filtresiyle com.example.android.beam
uygulaması artık bir NFC etiketini taradığında, com.example.android.beam
türünde AAR'ye sahip bir Android Beam aldığında ya da NDEF biçimli bir mesaj application/vnd.com.example.android.beam
türünde MIME kaydı içerdiğinde başlatılabilir.
AAR'ler bir uygulamanın başlatılmasını veya indirilmesini garanti etse de amaç filtreleri, ana Etkinliği her zaman bir AAR tarafından belirtilen paket içinde başlatmak yerine, uygulamanızda istediğiniz bir Etkinliği başlatmanızı sağladığından önerilir. AAR'ler Etkinlik düzeyi ayrıntı düzeyine sahip değildir. Ayrıca, Android destekli bazı cihazlar AAR'leri desteklemediğinden, kimlik bilgilerini NDEF mesajlarınızın ilk NDEF kaydına da yerleştirmeniz ve gerektiğinde bunu filtrelemek için de filtrelemeniz gerekir. Kayıt oluşturma hakkında daha fazla bilgi için Yaygın NDEF kaydı Türleri Oluşturma bölümüne bakın.