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



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

试图开发在华为Watch 2上简单地读取和显示NFC标签的能力会带来一些困难:

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

引发错误

java.lang.UnsupportedOperationException  

这意味着FEATURE_NFC不可用。
In 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教程和类似的帖子NFC Android Wear(华为手表2.0(

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

提前感谢您的帮助。

基于此文档,华为Watch 2支持NFC功能,并且还具有Android Wear 2.0。

但是,错误java.lang.UnsupportedOperationException意味着框架作者尚未实现该方法,因此您可以联系支持团队进行澄清。请参阅此链接。

如果您想

创建一个利用华为手表 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)

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

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

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

最新更新