Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在Delphi Android应用程序中调用本机摄像头?

如何在Delphi Android应用程序中调用本机摄像头?
EN

Stack Overflow用户
提问于 2018-12-18 00:51:35
回答 3查看 6.5K关注 0票数 4

我正在使用Delphi10.3 Community编写一个简单的Android应用程序,并试图调用本地设备摄像头,但却得到了一个错误。

我正在跟踪官方的德尔菲指南

在表单设计器上,选择按钮(用于拍照)。在对象检查器中,为Action属性选择下拉列表.选择“新标准操作”( New )媒体库( Media ):TTakePhotoFromCameraAction: 在Events选项卡上,展开Action节点,然后双击OnDidFinishTaking事件. 向OnDidFinishTaking事件处理程序添加以下代码: TForm1.TakePhotoFromCameraAction1DidFinishTaking(Image: TBitmap);Image1.Bitmap.Assign(图像);结束; 此代码将从移动设备摄像机拍摄的图片分配给TImage组件的Bitmap属性。

我已经验证了Project使用权限-照相机设置设置为true。我也在请求应用程序启动的必要许可。在调试和发行版中运行是没有区别的。

然而,存在一个问题。单击该按钮时,将收到以下错误消息:

android.content.pm.PackageItemInfo.loadXmlMetaData(android.content.pm.PackageManager,:尝试在空对象引用上调用虚拟方法'android.content.res.XmlResourceParser android.content.res.XmlResourceParser java.lang.String‘。

下面是我为最简单的测试应用程序编写的代码:

代码语言:javascript
运行
AI代码解释
复制
unit Unit1;
interface
uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, System.Permissions,
  FMX.StdCtrls, FMX.MediaLibrary, FMX.Platform, System.Messaging, FMX.Objects,
  System.Actions, FMX.ActnList, FMX.StdActns, FMX.MediaLibrary.Actions,
  FMX.Controls.Presentation;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ActionList1: TActionList;
    TakePhotoFromCameraAction1: TTakePhotoFromCameraAction;
    procedure FormCreate(Sender: TObject);
  private
    procedure PermissionRequestResult(Sender: TObject; const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>);
    procedure DisplayRationale(Sender: TObject; const APermissions: TArray<string>; const APostRationaleProc: TProc);
  end;

var
  Form1: TForm1;

implementation
uses
{$IFDEF ANDROID}
  Androidapi.Helpers,
  Androidapi.JNI.JavaTypes,
  Androidapi.JNI.Os,
{$ENDIF}
  FMX.DialogService;

{$R *.fmx}

procedure TForm1.PermissionRequestResult(Sender: TObject; const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>);
begin
  // 3 permission involved
  if (Length(AGrantResults) = 3)
  and (AGrantResults[0] = TPermissionStatus.Granted)
  and (AGrantResults[1] = TPermissionStatus.Granted)
  and (AGrantResults[2] = TPermissionStatus.Granted) then
  else
    ShowMessage('Required permission has not been granted') ;
end;

procedure TForm1.DisplayRationale(Sender: TObject; const APermissions: TArray<string>; const APostRationaleProc: TProc);
begin
  TDialogService.ShowMessage('Need to access the camera',
    procedure(const AResult: TModalResult)
    begin
      APostRationaleProc;
    end);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  permCam, permRead, permWrite: string;
begin
  // Request permissions
  permCam := JStringToString(TJManifest_permission.JavaClass.CAMERA);
  permRead := JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE);
  permWrite := JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE);
  PermissionsService.RequestPermissions([permCam, permRead, permWrite], PermissionRequestResult, DisplayRationale);
end;

end.

如何使本机相机TTakePhotoFromCameraAction工作?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-12-18 07:32:22

检查项目选项>权益列表>安全文件共享选项是否设置为true

票数 12
EN

Stack Overflow用户

发布于 2020-03-12 04:05:53

对于任何将项目从旧版本移植到10.3版本的人,请确保您的AndroidManifest.xml在<%application-meta%>标记前面包含了<%provider%>标记。

我在其他方面发现了很多评论,这里建议在这里可以找到这个文件:

代码语言:javascript
运行
AI代码解释
复制
C:\Users\(yourusername)\AppData\Roaming\Embarcadero\BDS\20.0\AndroidManifest.xml

但是,如果这样做不起作用,那么您可能已经在您的AndroidManifest.template.xml源目录中有了一个文件。如果是这样的话,那么编译器将使用这个模板文件并忽略AppData文件夹中的文件!

票数 2
EN

Stack Overflow用户

发布于 2020-12-29 10:44:56

我遇到了一些问题,有些运行Android 10的设备不能工作。我需要做上面列出的答案中的步骤,但我的回答直到我补充道:

Android:requestLegacyExternalStorage=“真”

到我的AndroidManifest.template.xml的应用程序部分

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53829324

复制
相关文章
Android如何调用摄像头
第一步必须加入调用摄像头硬件的权限,拍完照后我们要将图片保存在SD卡中,必须加入SD卡读写权限,所以第一步,我们应该在Android清单文件中加入以下代码
黄啊码
2020/05/29
1.5K0
Delphi 跨平台_delphi调用api接口
TCriticalSection = class(TSynchroObject) {$IFDEF POSIX} private type TCritSec = record FSync: TObject; procedure Initialize; inline; procedure Free; inline; procedure Enter; inline; procedure Leave; inline; function TryEnter: Boolean; inline; end; {$ENDIF POSIX} protected {$IFDEF MSWINDOWS} FSection: TRTLCriticalSection; {$ENDIF MSWINDOWS} {$IFDEF POSIX} FSection: TCritSec; {$ENDIF POSIX} public constructor Create; destructor Destroy; override; procedure Acquire; override; procedure Release; override; function TryEnter: Boolean; procedure Enter; inline; procedure Leave; inline; end;
全栈程序员站长
2022/08/04
2.1K0
android调用相册和摄像头_网页调用摄像头拍照
这里直接将得到的照片放在ImageView上 要裁剪,参考: http://blog.csdn.net/weixin_37577039/article/details/79186862
全栈程序员站长
2022/08/02
8200
Delphi调用驱动打印
我们做打印小票的时候除了直接对端口发送指令的方式,还有就是调用打印机驱动打印的方式,在Delphi中想要用驱动打印的方式就可以用到TPrinter类
Vaccae
2019/07/24
2.5K0
如何在应用程序中调用CMD并返回运行结果
要求做一个图形界面的应用程序,输入命令行的命令,在后台调用CMD程序执行该命令但不显示DOS命令行窗口,而且能实时显示运行的结果。哪位知道怎么处理?谢啦
用户3519280
2023/07/06
4140
Delphi Android ActivityManager
ActivityManager: 对Activity交互提供了接口, 利用它可以方便的对Memory, Processes, Task, Service 等进行管理,. 这里对Delphi接口进行了翻译,详细信息可以访问官方网站。
全栈程序员站长
2022/10/04
2.2K0
delphi调用webservice问题总结
1.把WSDL的URL地址放到了HTTPRIO的WSDLLocation参数中,然后选择service和port 2.最近一个项目用到了delphi调用C#写的web服务的功能。用了一天的时间找原因,终于测试通过了。 这是一个通过web服务把一个照片上传到网站指定位置的方法。先测试了N次都不成功,通过跟踪发现delphi根本没传过来任何值,通过查资料发现VS2005 默认是用的 SoapDocumentProtocol而Delphi 是使用的 SoapRpcProtocol.这会造成所以客户端传过去的字
Vaccae
2019/07/24
2.5K0
Delphi调用动态链接库
动态链接库(Dynamic Link Library,缩写为DLL)是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源。动态链接库文件的扩展名一般是dll,也有可能是drv、sys和fon,它和可执行文件(exe)非常类似,区别在于DLL中虽然包含了可执行代码却不能单独执行,而应由Windows应用程序直接或间接调用。
Vaccae
2019/07/25
2.7K0
Silverlight调用本机exe程序
要点: 1. Silverlight必须启用OOB模式,以及 Require elevated trust when running in-browser.参考下图设置 注:OOB模式,并不意味着必须
菩提树下的杨过
2018/01/19
1.2K0
Silverlight调用本机exe程序
Delphi 判断exe, dll等应用程序[x86/x64]
function FileIS64( Filename:string ):Boolean; var tsl:TStringStream; rStr:AnsiString; begin Result := False; if not FileExists(Filename) then Exit; tsl := TStringStream.Create; try tsl.LoadFromFile(Filename); tsl.Position := 0;
Tuesday
2019/11/01
7400
Delphi 判断exe, dll等应用程序[x86/x64]
[译] 如何在 Android 开发中充分利用多摄像头 API
这篇博客是对我们的 Android 开发者峰会 2018 演讲 的补充,是与来自合作伙伴开发者团队中的 Vinit Modi、Android Camera PM 和 Emilie Roberts 合作完成的。查看我们之前在该系列中的文章,包括 相机枚举、相机拍摄会话和请求 和 同时使用多个摄像机流。
Android 开发者
2019/04/09
2.4K0
[译] 如何在 Android 开发中充分利用多摄像头 API
Android应用程序中的多个Activity的显示创建和调用[通俗易懂]
http://download.csdn.net/detail/u011936142/7429455
全栈程序员站长
2022/07/08
1.6K0
Android应用程序中的多个Activity的显示创建和调用[通俗易懂]
ChatGPT教你如何拉取本机摄像头
最近了不起在自己的服务器里基于Pandora搭建了ChatGPT页面,以后只需要accessToken或者key就可以使用,不再需要再去官网玩了,省下了不少时间。
灬沙师弟
2023/09/06
7630
ChatGPT教你如何拉取本机摄像头
Delphi中QuotedStr()
1.定义 给字符串两边加单引号并返回. 声明:function QuotedStr(const S: string): string; 用函数 QuotedStr把字符串S转换成为用引号括起来的字符串。单引号” ’ ” 将被插入到字符串s的最前和最后。
全栈程序员站长
2022/11/02
1.1K0
如何在Fortran中调用Python
Python是机器学习领域不断增长的通用语言。拥有一些非常棒的工具包,比如scikit-learn,tensorflow和pytorch。气候模式通常是使用Fortran实现的。那么我们应该将基于Python的机器学习迁移到Fortran模型中吗?数据科学领域可能会利用HTTP API(比如Flask)封装机器学习方法,但是HTTP在紧密耦合的系统(比如气候模式)中效率太低。因此,可以选择直接从Fortran中调用Python,直接通过RAM传递气候模式的状态,而不是通过高延迟的通信层,比如HTTP。
bugsuse
2020/04/21
6.2K0
js调用摄像头
详情源码请参见下方的 GitHub  !!! 1 <div> 2 <b>调用移动端摄像头</b><br> 3 <label>照相机: <input type="file" id='image' accept="image/*" capture='camera'></label> 4 <label>摄像机: <input type="file" id='video' accept="video/*" capture='camcorder'></l
ProsperLee
2018/10/24
20.5K2
js调用摄像头
OpenCV调用摄像头
python:python3.6 摄像头:网络摄像头 Python库:openCV
py3study
2020/01/02
1.8K0
点击加载更多

相似问题

如何在Delphi中调用Android上蓝牙设置的本机窗口?

10

Android:本机摄像头应用程序默认为前置摄像头

10

Android摄像头活动,如Instagram

20

调用按钮,如Android4.0应用程序

12

本机Android摄像头使用什么库?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档