升级到Delphi11.3后遇到的Android问题

作者在升级到Delphi11.3后,遇到了两个主要问题:1)APK在Android13手机上安装时提示解析失败,通过将targetSdkVersion设置为29解决了问题;2)应用缺少读写外部存储的权限,通过设置requestLegacyExternalStorage并动态请求权限解决了问题。
摘要由CSDN通过智能技术生成

升级到Delphi11.3后遇到的Android问题

问题1:Delphi11.3生成的apk安装到手机的时候,提示安装包解析失败。

查看build出来的AndroidManifest.xml(生成apk的路径里能找到),关键的一行:

<uses-sdk android:minSdkVersion="23" android:targetSdkVersion="32" />

targetSdkVersion = 32,我的手机是荣耀的Android 13,按道理是支持32的,但不知为什么会提示这个错误,没办法,只好强行设置targetSdkVersion = 29,之所以是29,跟问题2有关。具体怎么设置?在你的代码目录里有个文件AndroidManifest.template.xml,打开会找到一行:

<uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" />

然后把%targetSdkVersion%直接改为29,保存后重新build,生成apk,再打开AndroidManifest.xml就会发现已经变为targetSdkVersion = “29”,再安装到手机就没有这个提示了。
具体原因没时间去研究,只能先改到能用吧。

问题2:apk安装到手机后没有读写文件的权限。

因为我的数据库文件不是放在app的私有目录,主要是担心卸载app会把我的数据库也一起删掉,所以我放在了外部存储。但是29版本后(Android 10),实行分区存储,app只能访问私有存储和共享存储,不能访问外部存储(具体说明可以百度一下targetSdkVersion 29/30相关的内容,这里不做阐述)。即使我给了Read external storage,Write external storage,Manage external storage权限,也不起作用。经过一番的网上查资料,说是targetSdkVersion = 29应用中,设置android:requestLegacyExternalStorage=“true”,就可以不启动分区存储,和以前一样正常访问外部存储,所以我把targetSdkVersion 设为29,然后查看AndroidManifest.xml,发现requestLegacyExternalStorage已经是true,以为没问题了,结果安装后还是没有读写文件的权限。在手机设置里,查看app的权限,根本就没有读写文件的权限可以让你选择。
没办法,继续查资料。看到有一篇文章提到,需要在代码里动态申请权限才行。然后我也试试在代码上加这段内容:

uses
  ...
  {$IFDEF ANDROID}
  Androidapi.Jni.Os, androidapi.Helpers, System.Permissions,
  {$ENDIF}
  ...
  
{$IFDEF ANDROID}
procedure TfrmMain.RequestPermissions;
var
  LPermissionReadExternalStorage, LPermissionWriteExternalStorage: string;
begin
  //先获取读写外部存储权限
  LPermissionReadExternalStorage := JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE);
  LPermissionWriteExternalStorage := JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE);
  PermissionsService.RequestPermissions([LPermissionReadExternalStorage, LPermissionWriteExternalStorage], nil, nil);
end;
{$ENDIF}

然后在form的create里调用RequestPermissions即可,调用的时候记得用{$IFDEF ANDROID}包住。
安装完后,第一次打开app会提示是否给它读写文件的权限,选择允许。在手机设置里,查看app的权限,也能看到已经获得的权限。
后来发现只给了Read external storage,Write external storage权限也可以,不需要Manage external storage权限,以前三个都要有的。
Delphi的资料越来越稀缺了,遇到问题真的是找不到解决办法,只能自己去摸索,能解决一个是一个,痛苦啊!好不容易盼来了一份代码可以支持多平台,却就此退出舞台了。

1. 在前端增加右下角的询盘表单弹窗: 可以使用以下代码实现,在 WordPress 主题的 functions.php 文件中添加以下代码: ```php add_action('wp_footer', 'my_custom_popup'); function my_custom_popup() { ?> <div id="popup-wrapper"> <div id="popup-content"> <h2>询盘表单</h2> <form> <label for="name">姓名:</label> <input type="text" id="name" name="name"> <label for="email">电子邮件:</label> <input type="email" id="email" name="email"> <label for="message">信息:</label> <textarea id="message" name="message"></textarea> <button type="submit">提交</button> </form> </div> </div> <style> #popup-wrapper { position: fixed; bottom: 0; right: 0; width: 300px; height: 300px; background-color: #fff; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.5); z-index: 9999; } #popup-content { padding: 20px; } </style> <?php } ``` 这段代码会在网站的底部右侧增加一个 300x300 的弹窗,内部包含一个表单。你可以根据需要更改弹窗的大小和表单的内容。 2. 在前端的右侧增加在线悬浮窗口: 可以使用以下代码实现,在 WordPress 主题的 functions.php 文件中添加以下代码: ```php add_action('wp_footer', 'my_custom_chat_widget'); function my_custom_chat_widget() { ?> <div id="chat-widget"> <a href="https://wa.me/8518588629881" target="_blank"> <img src="https://www.example.com/wp-content/uploads/whatsapp-icon.png" alt="WhatsApp Chat"> </a> </div> <style> #chat-widget { position: fixed; bottom: 20px; right: 20px; z-index: 9999; } </style> <?php } ``` 这段代码会在网站的底部右侧增加一个 WhatsApp 聊天的悬浮窗口。你需要将图片的 URL 替换为你自己的图片,也可以根据需要更改悬浮窗口的位置和样式。 3. 后台的排版: 如果你需要在后台增加一些统计数据,可以使用 WordPress 提供的 REST API 和图表插件实现。 首先需要安装一个图表插件,例如 WPForms Charts and Graphs。 然后在 functions.php 文件中添加以下代码: ```php add_action('wp_enqueue_scripts', 'my_custom_enqueue_scripts'); function my_custom_enqueue_scripts() { if (is_admin()) { wp_enqueue_script('my-custom-script', get_template_directory_uri() . '/js/my-custom-script.js', array('jquery'), '1.0', true); } } add_action('admin_menu', 'my_custom_admin_menu'); function my_custom_admin_menu() { add_menu_page('Dashboard', 'Dashboard', 'manage_options
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cloudysoul

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值