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加这一行无法编译通过。