pro*_*boy 2 android nfc intentfilter android-beam ndef
我在我的应用程序中使用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>
Run Code Online (Sandbox Code Playgroud)
我的手机上还有另一个示例应用程序,该应用程序正在检测NFC意图并向我提供意图选择器。以下是清单文件中的代码。
<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>
Run Code Online (Sandbox Code Playgroud)
我希望我的应用程序成为将特定NFC Intent从另一台设备推送过来时唯一的应用程序。
我不确定是否必须在清单文件或代码中执行特定的操作。任何帮助表示赞赏。
之所以获得意图选择器,是因为该数据类型注册了多个活动text/plain。这是一种很常见的情况,因此您应避免将此类通用数据类型用于应启动您的活动的NDEF记录。您有两种选择可以解决此问题:
对您的NDEF记录使用NFC论坛外部类型(这是ThomasRS已经提到的内容)。使用这种方法,您可以创建仅对您的应用有意义的自定义记录类型。您可以使用以下内容创建此类记录(将其写入标签或通过Beam发送):
NdefRecord extRecord = NdefRecord.createExternal(
"yourdomain.com", // your domain name
"yourtype", // your type name
textBytes); // payload
Run Code Online (Sandbox Code Playgroud)
然后,您可以注册您的活动以启动此记录,如下所示:
<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>
Run Code Online (Sandbox Code Playgroud)使用Android应用程序记录(AAR)。AAR将确保仅将NDEF_DISCOVERED意图传递给具有特定程序包名称的应用程序。您可以使用以下内容创建此类记录(将其写入标签或通过Beam发送):
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
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
3026 次 |
| 最近记录: |