开源:ReactNative集成百度语音开源库,在这篇文章中作者开源了一个ReactNative集成百度语音合成的组件库,今天通过查看Github上的关于开源react-native-baidu-vtts 的issues,有朋友提到了一个bug,并给出了具体报错
请问「java.lang.String com.wayne.baiduvoice.util.OfflineResource.getTextFilename()」为 null 是什么原因?
12-26 16:37:12.311 14862-14885/com.anlint.weightapp E/AndroidRuntime: FATAL EXCEPTION: mqt_native_modules Process: com.anlint.weightapp, PID: 14862 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.wayne.baiduvoice.util.OfflineResource.getTextFilename()' on a null object reference at com.wayne.baiduvoice.VoiceUtils.getParams(VoiceUtils.java:175) at com.wayne.baiduvoice.VoiceUtils.initialTts(VoiceUtils.java:83) at com.wayne.baiduvoice.VoiceUtils.init(VoiceUtils.java:65) at com.wayne.baiduvoice.RNBaiduvoiceModule.initBaiduTTS(RNBaiduvoiceModule.java:32) at java.lang.reflect.Method.invoke(Native Method) at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:371) at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:150) at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:26) at android.os.Looper.loop(Looper.java:148) at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:225) at java.lang.Thread.run(Thread.java:818)
仔细检查了一下自己开源库的代码,发现是Android10系统对于应用访问外部存储权限的问题,google在开发文档中也提到了这个问题,如下所述。
为了让用户更好地管理自己的文件并减少混乱,以 Android 10(API 级别 29)及更高版本为目标平台的应用在默认情况下被赋予了对外部存储设备的分区访问权限(即分区存储)。此类应用只能看到本应用专有的目录(通过 Context.getExternalFilesDir() 访问)以及特定类型的媒体。除非您的应用需要访问存放在应用的专有目录以及 MediaStore 之外的文件,否则最好使用分区存储。
目前已经修复此问题,并发布到了npm仓库,可通过如下命令行更新ReactNative项目依赖,解决这个bug.
yarn add react-native-baidu-vtts
感谢各位老铁们支持,我在以后得开源过程中,会多加努力,为开源社区贡献更多内容。