Để tải ứng dụng của bạn (thực tế là hoạt động) bắt đầu khi quét thẻ, bạn cần thêm bộ lọc mục đích thích hợp vào tệp kê khai ứng dụng của mình.
Nếu bạn muốn bắt đầu ứng dụng của bạn chỉ cần bất kỳ thẻ, TECH_DISCOVERED
lọc ý định là những gì bạn muốn sử dụng:
<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>
lọc ý định này yêu cầu một tập tin tài nguyên XML bổ sung mà xác định công nghệ thẻ mà ứng dụng của bạn nên lắng nghe (lưu ý thẻ <meta-data ... />
bên ngoài bộ lọc ý định).Các công nghệ sẵn có những người trong namespace android.nfc.tech.*
, hiện:
android.nfc.tech.IsoDep
android.nfc.tech.MifareClassic
android.nfc.tech.MifareUltralight
android.nfc.tech.Ndef
android.nfc.tech.NdefFormatable
android.nfc.tech.NfcA
android.nfc.tech.NfcB
android.nfc.tech.NfcBarcode
android.nfc.tech.NfcF
android.nfc.tech.NfcV
Để khám phá chỉ cần bất kỳ thẻ, bạn sẽ tạo ra một file XML như thế này (tạo ra các tập tin như xml/nfc_tech_filter.xml
):
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<tech-list>
<tech>android.nfc.tech.NfcA</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.NfcB</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.NfcBarcode</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.NfcF</tech>
</tech-list>
<tech-list>
<tech>android.nfc.tech.NfcV</tech>
</tech-list>
</resources>
Lưu ý rằng bạn không nhất thiết cần phải sử dụng các công nghệ khác như
IsoDep
ngụ ý hoặc NfcA
hay NfcB
,
MifareClassic
ngụ ý NfcA
,
MifareUltralight
ngụ ý NfcA
, và
Ndef
/NdefFormatable
hàm ý hoặc NfcA
, NfcB
, NfcF
, hoặc NfcV
.
Bộ lọc mục đích ở trên sẽ được kích hoạt nếu không có ứng dụng nào khác có bộ lọc mục đích phù hợp hơn. Một kết quả phù hợp hơn sẽ phù hợp với loại dữ liệu được sử dụng trên thẻ. Vì vậy, ví dụ: nếu thẻ của bạn chứa URL (được đóng gói trong thông báo NDEF), một ứng dụng kích hoạt trên URL sẽ được ưu tiên hơn ứng dụng của bạn. Nếu bạn biết (các) loại dữ liệu được sử dụng trên thẻ của mình, bạn cũng có thể thêm bộ lọc cho (các) loại dữ liệu đó. Ví dụ, để phù hợp với bất kỳ chỉ "http: //" và "https: //" URL, bạn có thể sử dụng:
<activity ...>
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
<data android:scheme="https" />
</intent-filter>
</activity>
Tương tự, nếu thẻ của bạn có chứa các loại MIME "application/vnd.com.example ", bạn có thể sử dụng:
<activity ...>
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/vnd.com.example" />
</intent-filter>
</activity>
bạn thậm chí có thể kết hợp nhiều bộ lọc ý định cho một hoạt động:
<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" />
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
<data android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/vnd.com.example" />
</intent-filter>
</activity>
Cuối cùng, có thêm một bộ lọc ý định NFC liên quan đến:
<intent-filter>
<action android:name="android.nfc.action.TAG_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
Tuy nhiên, bạn thường sẽ không sử dụng bộ lọc mục đích này trong tệp kê khai. Nó có nghĩa là như là một trở lại chỉ và sẽ chỉ bao giờ được kích hoạt nếu không có ứng dụng khác kích hoạt trên công nghệ hoặc dữ liệu của thẻ quét. Vì vậy, không cần phải thêm bộ lọc ý định này mà bạn đã kích hoạt cho bộ lọc ý định TECH_DISCOVERED
được đề cập ở trên.
Tính năng này có hoạt động nếu tôi tắt tất cả ứng dụng đang chạy trong điện thoại của mình không? Có vẻ như tôi khởi động lại điện thoại của mình và chạm vào NFC khi điện thoại được bật, sau đó là ứng dụng. sẽ được khởi chạy. Có phải nó không? – Jame
Có, tôi đã thử nghiệm trước đó, bạn chỉ cần bật NFC của mình. – user3406222
Cảm ơn bạn rất nhiều – Jame