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

【Delphi】一个函数实现ios,android震动功能 Vibrate(包括3D Touch 中 Peek 震动等)

一、前言

        我们在开发移动端APP的时候,有时可能需要APP能够提供震动功能,以便提醒操作者,特别是ios提供的3D Touch触感功能,操作者操作时会有触感震动,给操作者的感觉很友好。那么,在Delphi的移动端FMX开发中如何实现?

二、验证环境

以下程序代码在Delphi 的11.3上测试通过,注意在android系统中需要设置 Vibrate 权限。

测试设备:

  1. android:Redmi K30 5G android 11版本
  2. ios:iPhone 13 Pro Max 15.0.2

以上设备版本测试通过。

三、实现代码

函数说明:

//Param :
// android上:表示震动需要持续的时间,单位是毫秒
// ios上:表示震动的类型
//    $FFF 表示震动,
//    $5EF(1519)表示3D Touch 中 Peek 震动反馈
//    $5F0(1520)    3D Touch 中 Pop 震动反馈
//    $5F1(1521)表示连续三次短震
procedure Vibrate(Param : Integer = 0);

全部代码如下:使用时引用uVibrate_IOS_Android.pas单元即可使用上述函数。

{ sensor 2023-12-06 
}
unit uVibrate_IOS_Android;

interface
uses
{$IFDEF ANDROID}
  Androidapi.JNI.Os,
  Androidapi.JNI.GraphicsContentViewText,
  Androidapi.Helpers,
  Androidapi.JNIBridge;
{$ENDIF}
{$IFDEF IOS}
  //IOSapi.MediaPlayer,
  //IOSapi.CoreGraphics,
  //FMX.Platform,
  //FMX.Platform.IOS,
  //IOSapi.UIKit,
  Macapi.ObjCRuntime;
  //Macapi.ObjectiveC,
  //iOSapi.Cocoatypes,
  //Macapi.CoreFoundation,
  //iOSapi.Foundation,
  //iOSapi.CoreImage,
  //iOSapi.QuartzCore,
  //iOSapi.CoreData
{$ENDIF}


{$IFDEF IOS}
Const
  libAudioToolbox        = '/System/Library/Frameworks/AudioToolbox.framework/AudioToolbox';
  kSystemSoundID_vibrate = $FFF;    //表示震动

Procedure AudioServicesPlaySystemSound( inSystemSoundID: integer ); Cdecl; External libAudioToolbox Name _PU + 'AudioServicesPlaySystemSound';
{$ENDIF}

//Param :
// android上:表示震动需要持续的时间,单位是毫秒
// ios上:表示震动的类型
//    $FFF 表示震动,
//    $5EF(1519)表示3D Touch 中 Peek 震动反馈
//    $5F0(1520)    3D Touch 中 Pop 震动反馈
//    $5F1(1521)表示连续三次短震
procedure Vibrate(Param : Integer = 0);

implementation

procedure Vibrate(Param : Integer);
{$IFDEF ANDROID}
Var
  Vibrator:JVibrator;
{$ENDIF}
begin
  {$IFDEF ANDROID}
    if Param = 0 then Param := 300;
    
    Vibrator:=TJVibrator.Wrap((SharedActivityContext.getSystemService(TJContext.JavaClass.VIBRATOR_SERVICE) as ILocalObject).GetObjectID);
    // Vibrate for Param milliseconds
    Vibrator.vibrate(Param);
  {$ENDIF}
  {$IFDEF IOS}
    if Param = 0 then Param := kSystemSoundID_vibrate;
    AudioServicesPlaySystemSound( Param );
  {$ENDIF}
end;

end.

参考:How to vibrate iOS and Android phones using FireMonkey and XE8


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

相关文章:

  • Django基础用法+Demo演示
  • 若依笔记(八):芋道的Docker容器化部署
  • STM32 GPIO 配置
  • Apache ECharts
  • python数据写入excel文件
  • OSS文件上传
  • 图像处理中的角点检测Python-OpenCV 中的实现
  • mysql的组合查询
  • 【GAMES101】二维变换和齐次坐标
  • 华为配置风暴控制示例
  • 富时中国A50指数查询方法详解
  • Matlab 曲线动态绘制
  • OpenHarmony北向-让更广泛的应用开发者更容易参与
  • 【南京站-EI会议征稿中】第三届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2024)
  • C/C++---------------LeetCode第2154. 将找到的值乘以 2
  • 微信小程序 -- ios 底部小黑条样式问题
  • k8s中部署基于nfs的StorageClass
  • 看图学源码之 Atomic 类源码浅析二(cas + 分治思想的原子累加器)
  • 基于单片机自动饮料混合机控制系统设计
  • 【Java 基础】22 多线程线程池
  • 2022年第十一届数学建模国际赛小美赛A题翼龙如何飞行解题全过程文档及程序
  • 在github中通过action自动化部署 hugo academic theme,实现上传md文件更新博客内容
  • 华为数通---配置端口安全案例
  • 解决el-tree数据回显时子节点部分选中父节点都全选中问题
  • NFC和蓝牙在物联网中有什么意义?如何选择?
  • 华为设备使用python配置netconf 功能