- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从 NFC 标签读取数据。如果我使用 Play Store 中的“NfcV-reader”应用程序(由标签制造商 ST Microelectronics 编写),那么我可以确认标签包含带有 MIME 数据的 NDEF 记录。 MIME 类型是“application/myapp”,MIME 负载是“0123”,如下所示:
我希望我自己的应用程序在 Android 识别此标签时启动。我用我认为正确的 Intent 过滤器创建了应用程序。这是 AndroidManifest XML:
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.dummy.nfc.reader">
<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc" android:required="true" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".ActivityNfcReader">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.ACTION_NDEF_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="application/myapp"/>
</intent-filter>
</activity>
</application>
</manifest>
我已将该应用程序下载到 Nexus 6P 设备(Android 版本 6.0.1),将设备设置为主屏幕并使用字符串“nfc”的过滤器启动 logcat。这是我得到的:
04-11 16:23:33.108 4050 4050 D NativeNfcTag: Connect to a tech with a different handle
04-11 16:23:33.273 4050 3909 D NativeNfcTag: Starting background presence check
04-11 16:23:33.278 918 4148 I ActivityManager: START u0 {flg=0x10008000 cmp=com.android.nfc/.NfcRootActivity (has extras)} from uid 1027 on display 0
04-11 16:23:33.343 918 3469 I ActivityManager: START u0 {act=android.nfc.action.TECH_DISCOVERED cmp=com.google.android.tag/com.android.apps.tag.TagViewer (has extras)} from uid 1027 on display 0
04-11 16:23:35.430 4050 3909 D NativeNfcTag: Tag lost, restarting polling loop
04-11 16:23:35.432 4050 3909 D NfcService: Discovery configuration equal, not updating.
04-11 16:23:35.433 4050 3909 D NativeNfcTag: Stopping background presence check
我的问题是:为什么 Android 在我期待“android.nfc.action.NDEF_DISCOVERED”时调度“android.nfc.action.TECH_DISCOVERED”?
编辑 1(在收到下面的第一条评论后添加更多信息)
我使用了另一个应用程序“NFC TagInfo”来验证标签的内容。扫描的标签在 NFC TagInfo 中显示如下:
最后是将标签呈现给 Android 设备的 logcat:
04-12 09:30:48.609 3829 3829 D NativeNfcTag: Connect to a tech with a different handle
04-12 09:30:48.775 3829 10744 D NativeNfcTag: Starting background presence check
04-12 09:30:50.661 917 6053 I ActivityManager: START u0 {cmp=at.mroland.android.apps.nfctaginfo/.TagViewer (has extras)} from uid 10103 on display 0
04-12 09:30:50.834 917 935 I ActivityManager: Displayed at.mroland.android.apps.nfctaginfo/.TagViewer: +160ms
编辑 2(在使用接受的答案解决问题后添加正确的 logcat)
问题出在 intent 过滤器上。请参阅下面接受的答案。这是问题现已修复的 logcat 行为:
04-12 12:14:48.237 3829 3829 D NativeNfcTag: Connect to a tech with a different handle
04-12 12:14:49.371 3829 4052 E BrcmNfcNfa: rw_i93_process_timeout (): retry_count = 1
04-12 12:14:49.422 3829 14236 D NativeNfcTag: Starting background presence check
04-12 12:14:49.424 917 4427 I ActivityManager: START u0 {flg=0x10008000 cmp=com.android.nfc/.NfcRootActivity (has extras)} from uid 1027 on display 0
04-12 12:14:49.457 917 6053 I ActivityManager: START u0 {act=android.nfc.action.NDEF_DISCOVERED typ=application/myapp cmp=com.dummy.nfc.reader/.ActivityNfcReader (has extras)} from uid 1027 on display 0
04-12 12:14:49.553 917 935 I ActivityManager: Displayed com.dummy.nfc.reader/.ActivityNfcReader: +91ms (total +106ms)
最佳答案
您对 NDEF 消息的 Intent 过滤器是错误的。你目前有
<intent-filter>
<action android:name="android.intent.action.ACTION_NDEF_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="application/myapp"/>
</intent-filter>
虽然 MIME 类型与您标签上的 MIME 类型匹配,但 Intent 操作不正确。发现 NDEF 消息的正确操作是 "android.nfc.action.NDEF_DISCOVERED"
。因此,您需要将您的 Intent 过滤器更改为:
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="application/myapp"/>
</intent-filter>
关于Android NFC : Receiving TECH_DISCOVERED, 期待 NDEF_DISCOVERED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43350807/
我的应用程序中有两个 Activity 具有相同的 Intent 过滤器“android.nfc.action.NDEF_DISCOVERED”,是否有任何方式以编程方式告诉 Activity 我想开
我有一个始终在后台运行的服务,有没有办法在我的服务中捕获 NDEF_DISCOVERED Intent 过滤器?这样一来,一旦我的两个设备准备好传输,我就可以在服务中捕获该代码并根据需要对其进行操作?
我有一个我觉得很奇怪的问题。我有一个应在扫描包含 NdefMessage 的标签时启动的应用程序。这一切在 Galaxy Nexus、Nexus S 和 HTC one X 上都运行良好,但当我尝试在
我正在编写一个应该检测 nfc 标签并自动启动的应用程序。我已经通过使用 TECH_DISCOVERED + 过滤器成功地做到了这一点,但我认为更好的方法是使用 NDEF_DISCOVERED。我已将
我正在开发一个应用程序,它可以读取和处理来自 NFC 标签的特定 URI。我在 NDEF_DISCOVERED 上注册了一个“阅读器” Activity (A),它从标签中读取数据,然后启动一个“数据
我正在尝试从 NFC 标签读取数据。如果我使用 Play Store 中的“NfcV-reader”应用程序(由标签制造商 ST Microelectronics 编写),那么我可以确认标签包含带有
因此,我编写了一个 NFC 标签来启动我当前正在开发的应用程序。我使用以下服务来做到这一点: https://play.google.com/store/apps/details?id=com.wak
我是 Monodroid 的新手,想知道是否有办法使用 IntentFilter 属性来声明它: 我尝试使用 Visual Studio 的智能感知查找它,但没有显示
我刚刚接触 Android 中的 NFC。我有几个问题。首先,让我介绍一下代码。在我的程序中,它只是简单地从记录中检索有效负载并将它们记录为字符串。 @Override protected void
我正在构建一个通过 NFC 发送数据的应用程序。我让它工作但改变了命名空间,一些构建选项来制作发布 APK,更新 Android Studio 和其他东西,但没有改变代码,它不再工作了。 这是我的 l
我是一名优秀的程序员,十分优秀!