简而言之:
在华为手表 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