前言
本文主要记录一些安卓开发时,使用的小功能,我称之为小手段,算是一个学习笔记吧,而本文中关于一些公共的功能,我仅在第一次需要时编写,后面将不再重复,比如动态权限申请之类的。
另外关于安卓开发经常需要调用到的单元,我们也在这里一并说明,避免后面老是重复提起,常用的单元如下:
{$IFDEF ANDROID}
Androidapi.JNI.GraphicsContentViewText,
Androidapi.Helpers,
Androidapi.JNI.JavaTypes,
FMX.Helpers.Android,
Androidapi.Jni.Net,
androidapi.jni.Os,
androidapi.Jni.App,
Androidapi.JNIBridge,
Androidapi.JNI.Media,
{$ENDIF}
目录
如何存储图片(避免FMX和VCL出现JPEG Error #53的问题)
如何调用手机震动功能
实现此功能,我们需要三个动作,分别是:申请权限,建立函数,调用函数
申请震动权限
首先,我们打开AndroidManifest.template.xml文件,静态申请权限,如下:
<%uses-permission%>
<uses-permission android:name="android.permission.VIBRATE"/>
然后在Project---Option中,按下图的提示勾选震动权限

因为新版本的安卓系统需要动态申请权限,所以我们还需要动态申请,先定义一个变量,如下 :
private
{ Private declarations }
FpermissionVibrate: string;
接下来我们在窗体创建时,申请权限,代码如下:
procedure TFrmMain.FormCreate(Sender: TObject);
begin
FpermissionVibrate := JStringToString(TJManifest_permission.JavaClass.VIBRATE);
PermissionsService.RequestPermissions([FpermissionVibrate],TakePicturePermissionRequestResult, DisplayRationale);
end;
因申请权限时有标准的参数格式,所以上面的代码中涉及到了两个参数,我们需要单独写,如下:
procedure TFrmMain.TakePicturePermissionRequestResult(Sender: TObject;
const APermissions: TClassicStringDynArray;
const AGrantResults: TClassicPermissionStatusDynArray);
begin
if (Length(AGrantResults) = 1) and
(AGrantResults[0] = TPermissionStatus.Granted) then
begin
//权限被用户允许的代码
end
else
//权限被用户禁止的代码
TDialogService.ShowMessage('用户禁止权限,软件部分功能不能使用')
end;
procedure TFrmMain.DisplayRationale(Sender: TObject;
const APermissions: TClassicStringDynArray; const APostRationaleProc: TProc);
begin
TDialogService.ShowMessage('软件使用需要开通权限,否则将不能正常使用',
procedure(const AResult: TModalResult)
begin
APostRationaleProc;
end)
end;
到这里为止,我们的权限申请完成了,软件会在启动时提示需要权限,我们点允许就可以了
建立震动函数
有了震动的权限后,我们写一个震动的函数来实现功能,代码如下:
procedure Vibrate(ATime: Integer);
var
vJO:JObject;
vVibrator:Jvibrator;
begin
vJO:=SharedActivity.getSystemService(TJContext.JavaClass.VIBRATOR_SERVICE);
vVibrator:= TJvibrator.Wrap(vJO);
vVibrator.vibrate(ATime);
end;

967

被折叠的 条评论
为什么被折叠?



