開源:ReactNative集成百度語音開源庫,在這篇文章中做者開源了一個ReactNative集成百度語音合成的組件庫,今天經過查看Github上的關於開源react-native-baidu-vtts 的issues,有朋友提到了一個bug,並給出了具體報錯java
請問「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在開發文檔中也提到了這個問題,以下所述。react
爲了讓用戶更好地管理本身的文件並減小混亂,以 Android 10(API 級別 29)及更高版本爲目標平臺的應用在默認狀況下被賦予了對外部存儲設備的分區訪問權限(即分區存儲)。此類應用只能看到本應用專有的目錄(經過 Context.getExternalFilesDir() 訪問)以及特定類型的媒體。除非您的應用須要訪問存放在應用的專有目錄以及 MediaStore 以外的文件,不然最好使用分區存儲。
目前已經修復此問題,併發布到了npm倉庫,可經過以下命令行更新ReactNative項目依賴,解決這個bug.android
yarn add react-native-baidu-vtts
感謝各位老鐵們支持,我在之後得開源過程當中,會多加努力,爲開源社區貢獻更多內容。npm
歡迎關注個人公衆號:君偉說。分享開發技術,職場生活和程序猿的酸甜苦辣。 哦對了,這個號主,還喜歡發紅包😀。react-native