【问题标题】:Huawei Watch 2 NFC FEATURE not available?. Android Wear 2.0华为手表 2 NFC 功能不可用?安卓穿戴 2.0
【发布时间】:2018-01-25 07:41:02
【问题描述】:

简而言之:
在华为 Watch 2 上,似乎 NFC 可用且已启用,但 NFC_FEAUTURE 不可用,因此 nfc 无法正常工作.

试图在华为手表 2 上开发简单读取和显示 NFC 标签的能力会遇到一些困难:

mNfcAdapter.enableForegroundDispatch(this,nfcPendingIntent, nfcIntentFilter, null);  

引发错误

java.lang.UnsupportedOperationException  

这意味着 FEATURE_NFC 不可用。
在 MainActivity onCreate():

mNfcAdapter = NfcAdapter.getDefaultAdapter(this);  //NfcAdapter mNfcAdapter
if (mNfcAdapter != null) {
  // Check if device supports NFC
  Log.i("NFC","Your device supports NFC");
}
// Check if NFC is enabled
if (mNfcAdapter.isEnabled()) {
    Log.i("NFC","NFC is Enabled");
}
if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_NFC)) {
// Device compatible for NFC support
   Log.i("NFC", "Device compatible for NFC support"); 
}

在控制台中显示

... I/NFC: Your device supports NFC
... I/NFC: NFC is Enabled

但不是

... I/NFC: Device compatible for NFC support

换句话说

mNfcAdapter !=null
mNfcAdapter.isEnabled() == true(getPackageManager().hasSystemFeature(PackageManager.FEATURE_NFC) == false

这怎么可能?

顺便说一句。我的 AndroidManifest.xml:

<uses-permission android:name="android.permission.NFC"/>
<uses-feature android:name="android.hardware.nfc" android:required="true" />

另见Android NFC Tutorial 和类似的帖子NFC Android wear (Huawei watch 2.0)

我做错了什么?华为手表 2 上的 NFC 是否被锁定或禁用?

提前感谢您的帮助。

【问题讨论】:

  • 我正在 LG 运动手表上尝试类似的东西(使用 Google Pay 和 NFC)...您介意分享您的测试代码以便我快速验证吗?也许我们可以一起向谷歌提出一个案例。
  • 供您参考...在 LG Watch Sport 上,NfcAdapter.getDefaultAdapter(this) 返回 null,getPackageManager().hasSystemFeature(PackageManager.FEATURE_NFC) 返回 false。那里没有运气。

标签: android nfc wear-os huawei-mobile-services


【解决方案1】:

基于这个documentation,华为Watch 2支持NFC功能,它还支持Android Wear 2.0。

但是,错误java.lang.UnsupportedOperationException 表示框架作者尚未实现该方法,因此您可以联系支持团队进行澄清。看到这个link

【讨论】:

  • 感谢您的快速回答。我即将与华为开发者支持取得联系。我希望还有其他人有同样的问题。我将发布支持过程的结果。
  • 华为开发者支持没有电话号码,不回复邮件。请问还有人吗?
  • @RobinBöhm 你有没有取得任何进展?我现在面临同样的问题。
  • @sintho 很遗憾没有。你是否?我正在尝试再次面对这个问题。
  • @RobinBöhm 不适用于华为手表 2。我已切换到索尼 SmartWatch 3 SWR50,它存在一个启用了 NFC 的修补内核。对于我的小型研究项目,这已经足够了,但它显然不是“现实世界”项目的解决方案。
【解决方案2】:

如果您想在华为手表 2 上创建一个使用 NFC 功能的原型,您可以通过强制功能标志为 true 来规避此错误。

首先创建一个能够通过反射设置静态属性的函数:

fun setStaticValue(className: String, fieldName: String, newValue: Any) {
    val field = Class.forName(className).getDeclaredField(fieldName)

    field.setAccessible(true)

    val oldValue = field.get(Class.forName(className));

    field.set(oldValue, newValue);
}

然后在调用测试特征标志的方法之前使用该函数,如下所示:

setStaticValue("android.nfc.NfcAdapter", "sHasNfcFeature", true)

虽然我认为发布的应用程序不会接受这种 hack,但我能够使用这种方法识别标签。

我也向华为发送了错误报告,希望他们能够修复它。

有关使用反射的更多信息,请参阅:http://blog.sevagas.com/?Modify-any-Java-class-field-using-reflection

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    相关资源
    最近更新 更多