Huawei Watch 2 NFC FEATURE not available?. Android Wear 2.0

左心房为你撑大大i 提交于 2019-11-28 01:27:06

问题


In short:
On the Huawei Watch 2 it seems like NFC is available and enabled but NFC_FEAUTURE is not, hence nfc is not working properly.

Trying to develop the ability to simply read and display NFC tags on the Huawei Watch 2 raises some difficulties:

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

raises the error

java.lang.UnsupportedOperationException  

That implies the FEATURE_NFC is not available.
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"); 
}

shows in console

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

but not

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

In other words

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

How is this possible?

Btw. my AndroidManifest.xml:

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

see also Android NFC Tutorial and a similar post NFC Android wear (Huawei watch 2.0)

What am I doing wrong? Is NFC on the Huawei Watch 2 somehow locked or disabled?

Thanks in advance for helping.


回答1:


Based on this documentation, NFC feature is supported in Huawei Watch 2 and it also features Android Wear 2.0.

However, the error java.lang.UnsupportedOperationException means that the method isn't implemented yet by the framework authors, so you might contact the support team for clarifications. See this link.




回答2:


In case you want to create a prototype which makes use of the NFC feature on a Huawei Watch 2 you could circumvent this bug by forcing the feature flag to true.

First create a function which is able to set a static property through reflection:

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);
}

Then use the function just before you are calling a method which tests for the feature flag like this:

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

I don't think this hack will be accepted for released apps though, but I was able to recognize tags using this method.

I've also send a bug report to Huawei, so let's hope they will fix it.

For more information using reflection see: http://blog.sevagas.com/?Modify-any-Java-class-field-using-reflection



来源:https://stackoverflow.com/questions/48437854/huawei-watch-2-nfc-feature-not-available-android-wear-2-0

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!