解決 delphi xe10.3.1 Secure File Sharing選項不起作用坑一個

Android7.0開始,uri不能直接傳遞文件名,需要使用FileProvider,常見的異常就是,原先在低api版本下正常的程序,升級到api26及以上時,圖片分享,文字分享,程序下載更新後的啓動安裝,都會出錯,比如出現 ava.lang.nullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.PackageInfo.LoadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object referance 或者提示 android os. FileUriExposed Exception
file: ///storage/emulated/0/Android
/data/com xxx. xxx
/files/123. jpg exposed beyond app
through Clip Data Item. getUri() 之類的錯誤。

那麼我們可以勾選 option裏面的 entitlement list 下的 Secure File Sharing 選項。

如果是新建項目,這沒問題。但如果你是老項目用xe10.3.1打開的,那麼勾選後實際上會不起作用。有網友說重建一下項目,但這很麻煩。經過觀察,只要把新建空白項目下的 AndroidManifest.template.xml 文件拷貝覆蓋掉老項目內的同名文件即可。或者直接在老項目的AndroidManifest.template.xml 文件的大概22行左右位置插入內容:<%provider%> (注:後面的方法未經實踐,沒仔細比較過新老兩個文件的全部差異)。

經過這麼折騰後重新編譯,圖片分享和文字分享功能已經正常,但下載更新功能還需進一步修改爲provider支持 具體可參考GitHub上

https://github.com/yangyxd/FMXUI/blob/c01fb797c73af604b53091eed7f1fc66217155b4/source/UI.Utils.pas

這個文件內的 InstallApk 函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章