TFileStream.Create(FInstallFileName, fmCreate or fmShareExclusive);
這一句在android下執行,出錯,提示:
Cannot create file "/stroage/emulated/0/Documents/com.kinglandsoft.xxx.apk". Permission denied.

10.3.3沒有這個問題的,權限夠的。
百度查到的資料:
Android 10 創建文件一直報錯:Permission denied;
原來 Android 10 改變了文件的存儲方式
可以在Androidmainfest 里面的application添加
android:requestLegacyExternalStorage="true"
按上面的方法解決了!
我為什么在10.3.3正常呢?是因為10.3.3使用的android sdk版本低,換成10.4.1用的是高版本的sdk,os要檢查的。試着用Delphi 10.4.1建立新項目,查看AndroidManifest.template.xml,發現已經增加了這一行:android:requestLegacyExternalStorage="true"
就是說,我的項目是10.3.3建立的,如果用10.4.1建立項目,則沒有這個問題。
<?xml version="1.0" encoding="utf-8"?> <!-- BEGIN_INCLUDE(manifest) --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="%package%" android:versionCode="%versionCode%" android:versionName="%versionName%" android:installLocation="%installLocation%"> <uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" /> <%uses-permission%> <uses-feature android:glEsVersion="0x00020000" android:required="True"/> <application android:persistent="%persistent%" android:restoreAnyVersion="%restoreAnyVersion%" android:label="%label%" android:debuggable="%debuggable%" android:largeHeap="%largeHeap%" android:icon="%icon%" android:theme="%theme%" android:hardwareAccelerated="%hardwareAccelerated%" android:resizeableActivity="false" android:requestLegacyExternalStorage="true">
后記:注意10.3.3加這一行無法編譯通過。
