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

别裁伪体亲风雅,转益多师是汝师。这篇文章主要讲述Delphi XE5 Android 调用手机震动(通过JObject测试是否支持震动)相关的知识,希望能为你提供帮助。
源码如下:
[delphi]  view plain  copy  

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

    推荐阅读