Delphi XE5 Android 调用手机震动(通过JObject测试是否支持震动)

源码如下:

[delphi] view plain copy

  1. uses
  2. Androidapi.JNI.Os,
  3. Androidapi.JNIBridge;
  4. function GetVibratorArray(const AIntArr: array of Int64): TJavaArray<Int64>;
  5. var
  6. LIndex: Integer;
  7. begin
  8. Result := TJavaArray<Int64>.Create(Length(AIntArr));
  9. for LIndex := Low(AIntArr) to High(AIntArr) do
  10. Result.Items[LIndex] := AIntArr[LIndex];
  11. end;
  12. procedure VibratorTest;
  13. var
  14. LVibratorObj: JObject;
  15. LVibrator: JVibrator;
  16. LJavaArray: TJavaArray<Int64>;
  17. begin
  18. { Vibrator概要:
  19. cancel(): 关闭震动
  20. hasVibrator():检查硬件是否支持
  21. vibrate(long milliseconds): 震动milliseconds毫秒
  22. vibrate(long[] pattern, int repeat):按给定数组震动 }
  23. { 需要开启Vibrator权限 }
  24. // <del>LVibrator := TJVibrator.Create as JVibrator;</del>
  25. { 使用官方推荐方式创建 2014-5-8 update}
  26. LVibratorObj := SharedActivity.getSystemService(
  27. TJContext.JavaClass.VIBRATOR_SERVICE);
  28. LVibrator := TJVibrator.Wrap((LVibratorObj as ILocalObject).GetObjectID);
  29. { 测试手机是否支持震动 }
  30. if not LVibrator.hasVibrator then
  31. begin
  32. ShowMessage(‘手机不支持震动‘);
  33. Exit;
  34. end;
  35. { Test procedure vibrate(milliseconds: Int64); cdecl; overload; }
  36. { 效果A: 立即震动 800 毫秒 }
  37. //  LVibrator.vibrate(800);
  38. { Test procedure vibrate(pattern: TJavaArray<Int64>; repeat_: Integer); cdecl; overload;
  39. pattern: 为震动数组参数,偶数代表等待时间(ms), 奇数代表震动持续时间(ms)
  40. repeat_: -1: 只震动一遍;  > -1: 从Index为 repeat_ 的位置开始重复震动 }
  41. { 创建测试数组 }
  42. LJavaArray := GetVibratorArray([500, 1000, 2000, 3000]);
  43. { 效果B: 等待500毫秒 -> 震动1秒 -> 等待2秒 -> 震动3秒 }
  44. //  LVibrator.vibrate(LJavaArray, -1);
  45. { 效果C: 效果B重复震动 }
  46. //  LVibrator.vibrate(LJavaArray, 0);
  47. { 取消震动(当手机暗屏或锁屏时会自动取消) }
  48. //  LVibrator.cancel;
  49. { 效果D: (等待500毫秒 -> 震动1秒 -> 等待2秒 -> 震动3秒)(先按原顺序震动一遍)
  50. 接着循环 [1000, 2000, 3000]
  51. ->(等待1秒 -> 震动2秒 - > 等待3秒)
  52. ->[等待1秒 -> 等待2秒 ... ]
  53. 这个听上去的效果像( 等待4秒 -> 震动2秒 )}
  54. // LVibrator.vibrate(LJavaArray, 1);
  55. { 效果E: (先按原顺序执行一遍), 接着不会震动(偶数为等待时间) }
  56. //  LVibrator.vibrate(LJavaArray, 3);
  57. { 效果F: 当然是报IndexOutBounds异常 }
  58. //  LVibrator.vibrate(LJavaArray, {!!!}4);
  59. end;

http://blog.csdn.net/flcop/article/details/13290779

时间: 2024-10-27 02:17:16

Delphi XE5 Android 调用手机震动(通过JObject测试是否支持震动)的相关文章

学习使用Delphi for android 调用Java类库

http://blog.csdn.net/laorenshen/article/details/41148253 学习使用Delphi for android 调用Java类库 2014-11-15 18:36 1053人阅读 评论(0) 收藏 举报  分类: 安卓开发(27)  Android是一套非常优秀的移动端操作系统,Delphi Xe5中也能直接调用SDK中提供的各项API,但是delphi自己封装的AndroidAPI非常少,在安装目录的 source\rtl\android 中,而

Android调用手机浏览器

调用手机默认的浏览器: 1 Intent intent = new Intent(); 2 intent.setAction("android.intent.action.VIEW"); 3 Uri targetUrl = Uri.parse("http://www.cnblogs.com/ivan-aldrich/"); 4 intent.setData(targetUrl); 5 startActivity(intent);

Delphi XE5 android 获取网络状态

unit Androidapi.JNI.Network; interface function IsConnected: Boolean; function IsWiFiConnected: Boolean; function IsMobileConnected: Boolean; implementation uses System.SysUtils, Androidapi.JNIBridge, Androidapi.JNI.GraphicsContentViewText, Androidap

Android调用手机中的应用市场,去评分的功能实现

在我们常常使用的软件当中,我们经常可以看到在软件的设置界面,有一个功能那就是去评分的功能,只要我们一点击“去评分”就会调用手机中的应用市场软件.一开始我以为这个功能的实现是要遍历整个手机中的软件包名,去匹配市场上的大多数应用市场软件呢,这个方法一看就非常麻烦.之后,经过研究才发现其实这个功能实现非常简单. 四行代码就能实现,就能够调用出您手机上所安装的所有应用市场. 代码如下: Uri uri = Uri.parse("market://details?id="+getPackageN

Android调用手机摄像头使用MediaRecorder录像并播放

最近在项目开发中需要调用系统的摄像头录像并播放. 在开发中遇到了两个问题,记录下: (1)开发过程中出现摄像头占用,启动失败,报错.但是我已经在onDestory()中关闭了资源. 报错原因:打开程序,调用摄像头,按Home键再打开程序调用,报错摄像头被占用. 解决:在onStop()中关闭资源,在onResume()中判断是否为null,否则实例化资源. (2)其中我录像播放的代码写在Fragment+ViewPager中,在来回切换Fragment的时候,摄像头只能调用一次,并且所在的Fra

Delphi XE5 Android Dialogs 对话框(模拟做了一套)

最近要在Android中使用对话框, 但发现无现成的, TOpenDialog等已经不支持移动设备,还好系统提供了一些文件目录函数可用,于是简单的模拟了一个,支持OpenDialog ,SaveDialog, SelectDirectory, 以及文件过滤和多选. 截了一些图片,好像有些失真,还是以真机为准. OpenDialog : SaveDialog: SelectDirectory: 图片多选过滤: 工程下载:http://download.csdn.net/detail/flcop/6

delphi编写与调用DLL(delphi7下测试通过)

http://blog.sina.com.cn/s/blog_4dbbf76f01000anz.html 1 delphi编写DLL 2 下面在delphi中编写一个简单的dll,在该dll中只有一个max函数,返回2个数中的大数(Delphi 5.0) 3 1.New->DLL;取名为DLL_0001,编写代码: 4 library dll_0001; 5 uses 6 SysUtils, 7 Classes; 8 {$R *.RES} 9 function max(x,y:integer):

Delphi XE5 安卓手机要求

1 ARMv7 的 CPU v6 的肯定不支持. 2 黑屏是因为你的手机 CPU 不支持 NEON 特性.或者是 T2 海思 CPU .这 2 个不支持. 3 系统版本  2.3.3 到 2.3.9 或者 4.0 以上. 4. SDK 请使用 4.0 以上的.最好不要自己配置,使用  XE5 自带的配置. AndroidSDK22.0.1_32bit 如果卖家不知道 CPU 的信息,你直接从群共享下一个 APK,发给卖家,看看能不能运行. 最好是带 EDIT 或 MEMO 的. 推荐我的 Fly

Delphi XE6 for Android 让手机震动(调用Java的函数)

震动,是调用了 安卓api  JNI 里面的 函数  ,这些都是 调用java的 ,如下面的引用, uses  FMX.Helpers.Android,  Androidapi.JNI.App,  Androidapi.JNI.Os,  Androidapi.JNIBridge, FMX.StdCtrls; 还是分几步, 1  新建一个手机项目 打开xe6, file  ----  new ----FireMonkeyMobile Application-Delphi 2    选择black