华为手表2 NFC功能不可用? Android Wear 2.0

时间:2018-01-25 07:41:03

标签: android nfc wear-os huawei

简而言之:
在华为手表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是以某种方式锁定还是禁用?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

基于此documentation,华为手表2支持NFC功能,并且还具有Android Wear 2.0功能。

但是,错误java.lang.UnsupportedOperationException表示该方法尚未由框架作者实现,因此您可以联系支持团队进行说明。请参阅此link

答案 1 :(得分:0)

如果您想创建一个利用Huawei Watch 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