[英]Delphi/FireMonkey: Cannot set Android camera to work
I'm trying to reproduce the AccessCameraApp.dproj app but it does not work for the TakePhotoFromCameraAction1, giving me the following error: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference.我正在尝试重现 AccessCameraApp.dproj 应用程序,但它不适用于 TakePhotoFromCameraAction1,给我以下错误:java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser ZC31B32364CE19CA8FCD150A417ECCECE. .ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' 在 null object 参考。
The odd thing is that the Library button works perfectly...奇怪的是图书馆按钮工作完美......
The form looks like this: Form1表单如下所示: Form1
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, System.Permissions,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls, System.Actions,
FMX.ActnList, FMX.StdActns, FMX.MediaLibrary.Actions, FMX.Objects, FMX.Graphics,
FMX.Controls.Presentation;
type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
ActionList1: TActionList;
Button2: TButton;
TakePhotoFromLibraryAction1: TTakePhotoFromLibraryAction;
TakePhotoFromCameraAction1: TTakePhotoFromCameraAction;
procedure TakePhotoFromCameraAction1DidFinishTaking(Image: TBitmap);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
procedure DisplayRationale(Sender: TObject; const APermissions: TArray<string>; const APostRationaleProc: TProc);
procedure TakePicturePermissionRequestResult(Sender: TObject; const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>);
private const
PermissionCamera = 'android.permission.CAMERA';
PermissionReadExternalStorage = 'android.permission.READ_EXTERNAL_STORAGE';
PermissionWriteExternalStorage = 'android.permission.WRITE_EXTERNAL_STORAGE';
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.Button1Click(Sender: TObject);
begin
TAG := 1;
PermissionsService.RequestPermissions([PermissionCamera, PermissionReadExternalStorage, PermissionWriteExternalStorage], TakePicturePermissionRequestResult, DisplayRationale);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
TAG := 2;
PermissionsService.RequestPermissions([PermissionCamera, PermissionReadExternalStorage, PermissionWriteExternalStorage], TakePicturePermissionRequestResult, DisplayRationale);
end;
procedure TForm1.DisplayRationale(Sender: TObject; const APermissions: TArray<string>; const APostRationaleProc: TProc);
begin
APostRationaleProc;
end;
procedure TForm1.TakePicturePermissionRequestResult(Sender: TObject; const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>);
begin
if (Length(AGrantResults) = 3) and (AGrantResults[0] = TPermissionStatus.Granted) and (AGrantResults[1] = TPermissionStatus.Granted) and (AGrantResults[2] = TPermissionStatus.Granted) then
begin
if TAG = 1
then TakePhotoFromCameraAction1.Execute
else TakePhotoFromLibraryAction1.Execute;
end
else
ShowMessage('Cannot take a photo because the required permissions are not all granted');
end;
procedure TForm1.TakePhotoFromCameraAction1DidFinishTaking(Image: TBitmap);
begin
Image1.Bitmap := Image;
end;
end.
Check that the Project Options > Entitlements List > Secure File Sharing option is set to true.检查项目选项 > 权利列表 > 安全文件共享选项是否设置为 true。 Thanks to Dave Nottage感谢戴夫·诺塔奇
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.