当前位置: 首页 > article >正文

delphi 12 给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:


http://www.kler.cn/a/300973.html

相关文章:

  • 《银行保险机构数据安全管理办法》正式实施,分类分级、安全评估共筑安全防线
  • 【学习笔记】Macbook管理多个不同的Python版本
  • CNCF云原生计算基金会
  • C++ 文字识别OCR
  • 《leetcode-runner》如何手搓一个debug调试器——指令系统
  • SK海力士(SK Hynix)是全球领先的半导体制造商之一,其在无锡的工厂主要生产DRAM和NAND闪存等存储器产品。
  • 聚铭网络受邀成为ISC终端安全生态联盟首批成员单位
  • 【jvm】记一次hive堆heap内存溢出的排查
  • opencv之图像轮廓(三)--凸包
  • 机器学习 第11章 特征选择与稀疏学习
  • 【网络】UDP协议的简单使用
  • 前端性能优化——对节流与防抖的理解
  • pico2 开发环境搭建-基于ubuntu
  • 李宏毅结构化学习 01
  • 力扣238 移动零 Java版本 时间复杂度为O(0)
  • 机器学习 第12章 计算学习理论
  • 在Excel里制作简单游戏界面
  • F12抓包09:获取图片base64码
  • [hadoop全分布部署]安装Hadoop、配置Hadoop 配置文件②_core-site
  • 为什么苹果智能为AI隐私设立了新的黄金标准
  • Windows Forms应用程序中集成一个ASP.NET API服务
  • Docker数据挂载本地目录
  • 基于SpringBoot+Vue的考研学习分享互助平台
  • 智能物流新“黑神话”:各位“天命人”,这份行业应用锦集请收下!
  • 实例讲解电动汽车车速计算算法及Simulink建模方法
  • 模型和算力看板:Compute DashBoard