项目背景: 开发了一个android原生插件,可用于蓝牙连接配对等功能操作;
问题: ble蓝牙连接没有问题,但是触发bt传统蓝牙配对的时候会报错;
步骤:点击配对,弹出配对提示框,选择配对按钮,报错;但不影响配对结果,结果依然可以成功配对;
问题分析: 经过筛查发现是蓝牙配对的过程中会使用 com.alibaba.fastjson 插件映射 BluetoothDevice 类中的 isInSilenceMode 方法,而这个方法大概意思是:选择自动配对,不经过手动配对;由于当前系统一般为手动配对,自动配对会泄露隐私等情况,所以直接静默配对是不可行的;这里应该是需要更新uni-v8-release.aar包进行处理该问题;
尝试方案:在 android 原生端使用反编译 uni-v8-release.aar,去掉错误日志打印,仅在 AS 中运行工程可行,导出原生插件后移入 Hbuilder 中打自定义基座会打包失败,显示 uni-v8-release.aar 重复冲突,或者是否有什么方案可以修改默认集成的v8包?
错误日志:https://ide.dcloud.net.cn/build/errorLog/f8f67370-8f2e-11ee-ab45-c354fc69beb4
问题日志:
reportJSException >>>> exception function:invokeCallJSBatch, exception:invokeCallJSBatch#com.alibaba.fastjson.JSONException: toJSON error
at com.alibaba.fastjson.JSON.toJSON(JSON.java:1226)
at com.alibaba.fastjson.JSON.toJSON(JSON.java:1116)
at com.taobao.weex.wson.Wson$Builder.writeAdapterObject(Wson.java:606)
at com.taobao.weex.wson.Wson$Builder.writeObject(Wson.java:503)
at com.taobao.weex.wson.Wson$Builder.writeMap(Wson.java:593)
at com.taobao.weex.wson.Wson$Builder.writeObject(Wson.java:416)
at com.taobao.weex.wson.Wson$Builder.writeObject(Wson.java:431)
at com.taobao.weex.wson.Wson$Builder.writeMap(Wson.java:593)
at com.taobao.weex.wson.Wson$Builder.writeObject(Wson.java:416)
at com.taobao.weex.wson.Wson$Builder.writeObject(Wson.java:465)
at com.taobao.weex.wson.Wson$Builder.toWson(Wson.java:382)
at com.taobao.weex.wson.Wson$Builder.access$400(Wson.java:355)
at com.taobao.weex.wson.Wson.toWson(Wson.java:117)
at com.taobao.weex.utils.WXWsonJSONSwitch.toWsonOrJsonWXJSObject(WXWsonJSONSwitch.java:87)
at com.taobao.weex.bridge.WXBridgeManager.invokeCallJSBatch(WXBridgeManager.java:2246)
at com.taobao.weex.bridge.WXBridgeManager.handleMessage(WXBridgeManager.java:1913)
at com.taobao.weex.common.WXThread$SafeCallback.handleMessage(WXThread.java:109)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:224)
at android.os.HandlerThread.run(HandlerThread.java:67)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at com.alibaba.fastjson.util.FieldInfo.get(FieldInfo.java:571)
at com.alibaba.fastjson.serializer.FieldSerializer.getPropertyValue(FieldSerializer.java:151)
at com.alibaba.fastjson.serializer.JavaBeanSerializer.getFieldValuesMap(JavaBeanSerializer.java:799)
at com.alibaba.fastjson.JSON.toJSON(JSON.java:1221)
... 19 more
Caused by: java.lang.SecurityException: Need BLUETOOTH PRIVILEGED permission: Neither user 11660 nor current process has android.permission.BLUETOOTH_PRIVILEGED.
at android.os.Parcel.createException(Parcel.java:2074)
at android.os.Parcel.readException(Parcel.java:2042)
at android.os.Parcel.readException(Parcel.java:1990)
at android.bluetooth.IBluetooth$Stub$Proxy.getSilenceMode(IBluetooth.java:3117)
at android.bluetooth.BluetoothDevice.isInSilenceMode(BluetoothDevice.java:1884)
... 24 more
0 个回复