简而言之:
在华为手表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是以某种方式锁定还是禁用?
提前感谢您的帮助。
答案 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