delphi给App授予权限
首先要切换到安卓平台下:
第一步:
Project — Options — Application — Uses Permissions:
-
注意如下图:产生费用的功能 要谨慎勾选——打电话、发送短信…
第二步:
引用权限单元UnitPermission:(Alt+F11)
unit UnitPermission; interface uses {$IFDEF ANDROID} Androidapi.Helpers, Androidapi.JNI.JavaTypes, Androidapi.JNI.OS, {$ENDIF} System.Permissions; function RequestLocation: Boolean; function RequestRecordAudio: Boolean; function RequestCamera: Boolean; function RequestReadStorage: Boolean; function RequestWriteStorage: Boolean; function RequestSendSMS:Boolean; function RequestReadPhoneState:Boolean; implementation function RequestReadPhoneState: Boolean; var Value: Boolean; begin Value := False; {$IFDEF ANDROID} PermissionsService.RequestPermissions( [JStringToString(TJManifest_permission.JavaClass.READ_PHONE_STATE)], procedure(const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>) begin if (Length(AGrantResults) = 1) and (AGrantResults[0] = TPermissionStatus.Granted) then begin Value := (True); end else begin Value := (False); end; end); {$ENDIF} Result := Value; end; function RequestLocation: Boolean; var Value: Boolean; begin Value := False; {$IFDEF ANDROID} PermissionsService.RequestPermissions( [JStringToString(TJManifest_permission.JavaClass.ACCESS_FINE_LOCATION)], procedure(const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>) begin if (Length(AGrantResults) = 1) and (AGrantResults[0] = TPermissionStatus.Granted) then begin Value := (True); end else begin Value := (False); end; end); {$ENDIF} Result := Value; end; function RequestRecordAudio: Boolean; var Value: Boolean; begin Value := False; {$IFDEF ANDROID} PermissionsService.RequestPermissions([JStringToString(TJManifest_permission.JavaClass.RECORD_AUDIO)], procedure(const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>) begin if (Length(AGrantResults) = 1) and (AGrantResults[0] = TPermissionStatus.Granted) then begin Value := (True); end else begin Value := (False); end; end); {$ENDIF} Result := Value; end; function RequestCamera: Boolean; var Value: Boolean; begin Value := False; {$IFDEF ANDROID} PermissionsService.RequestPermissions([JStringToString(TJManifest_permission.JavaClass.CAMERA)], procedure(const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>) begin if (Length(AGrantResults) = 1) and (AGrantResults[0] = TPermissionStatus.Granted) then begin Value := (True); end else begin Value := (False); end; end); {$ENDIF} Result := Value; end; function RequestReadStorage: Boolean; var Value: Boolean; begin Value := False; {$IFDEF ANDROID} PermissionsService.RequestPermissions([JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE)], procedure(const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>) begin if (Length(AGrantResults) = 1) and (AGrantResults[0] = TPermissionStatus.Granted) then begin Value := (True); end else begin Value := (False); end; end); {$ENDIF} Result := Value; end; function RequestWriteStorage: Boolean; var Value: Boolean; begin Value := False; {$IFDEF ANDROID} PermissionsService.RequestPermissions([JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE)], procedure(const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>) begin if (Length(AGrantResults) = 1) and (AGrantResults[0] = TPermissionStatus.Granted) then begin Value := (True); end else begin Value := (False); end; end); {$ENDIF} Result := Value; end; function RequestSendSMS:Boolean; var Value: Boolean; begin Value := False; {$IFDEF ANDROID} PermissionsService.RequestPermissions([JStringToString(TJManifest_permission.JavaClass.SEND_SMS)], procedure(const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>) begin if (Length(AGrantResults) = 1) and (AGrantResults[0] = TPermissionStatus.Granted) then begin Value := (True); end else begin Value := (False); end; end); {$ENDIF} Result := Value; end; end.
更改授权功能,对下图 红框中的 进行更改,还有其他一些小地方自己更改下就可以了
把空格的地方 换作 下划线_ ;其他功能都类似:
最后注意:
如果按照上述方法 授权,功能仍不可用的话, 尝试勾选 下面这个
Project——Options——Application——Entitlement List:
分类:
Delphi_Android
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2018-12-21 findpanel 的相关代码