DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: ning_s
今日帖子: 14
在线用户: 25
导航: 论坛 -> 发布代码 斑竹:liumazi,ruralboy  
作者:
男 yuzhenguo0 (金远见) ▲▲▲△△ -
注册会员
2015/6/8 13:55:57
标题:
请求一位大侠告诉我XE7 安卓震动程序退出问题 浏览:1577
加入我的收藏
楼主: 手机是 安卓5.0 我一用 震动功能 程序就死掉了 是服务不允许吗?

          LVibrator:=TJVibrator.Wrap((SharedActivity.getSystemService(TJActivity.javaClass.VIBRATOR_SERVICE ) as iLocalObject).GetObjectID );//引用震动
          LVibrator.vibrate(200);//震動200MS
          ListBoxItem1.Text := '請調好正確姿勢..!';
          if not LVibrator.hasVibrator then
          begin
          showmessage('手机不支持震动');
          exit;
          end;
在安卓 4.4测试成功 在5.0 直接就死掉了
估计是 没获取到权限
----------------------------------------------
学DELPHI http://www.studydelphi.com
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2015/6/8 13:57:34
1楼: 楼主是保密局的。连个代码都没有。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 yuzhenguo0 (金远见) ▲▲▲△△ -
注册会员
2015/6/8 14:20:58
2楼:           LVibrator:=TJVibrator.Wrap((SharedActivity.getSystemService(TJActivity.javaClass.VIBRATOR_SERVICE ) as iLocalObject).GetObjectID );//引用震动
          LVibrator.vibrate(200);//震動200MS
          ListBoxItem1.Text := '請調好正確姿勢..!';
          if not LVibrator.hasVibrator then
          begin
          showmessage('手机不支持震动');
          exit;
          end;
在安卓 4.4测试成功 在5.0 直接就死掉了
估计是 没获取到权限
----------------------------------------------
学DELPHI http://www.studydelphi.com
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2015/6/8 14:27:15
3楼: callinuithread
包裹一下试试。

使用振动器必须要指定权限
<uses-permission android:name="android.permission.VIBRATE"/>
----------------------------------------------
(C)(P)Flying Wang
作者:
男 szlbz (szlbz) ★☆☆☆☆ -
盒子活跃会员
2015/6/8 14:28:08
3楼: 如果用XE7请打5.0补丁后重新编译
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2015/6/8 14:31:19
4楼: 如果是 补丁问题,那么,楼主害人不浅。
如果不是。那么请,继续研究。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 gaoyong_gy (gaoyong_gy) ★☆☆☆☆ -
盒子活跃会员
2015/6/8 15:25:54
5楼: 给个完整代码:

  xe8下编译:http://pan.baidu.com/s/1hqw7lA0
----------------------------------------------
Delphi 的移动程序开发,是您不可再错失的机遇:http://blog.163.com/you888@188/blog/static/6723961920169319529515/
作者:
男 yuzhenguo0 (金远见) ▲▲▲△△ -
注册会员
2015/6/8 21:21:25
6楼: 高勇哥您好 我试过您给的 也不行的 
我的程序在安卓4。4上没问题
我在三星5.0手机上 就不震动 死掉了 获取不到服务
----------------------------------------------
学DELPHI http://www.studydelphi.com
作者:
男 yuzhenguo0 (金远见) ▲▲▲△△ -
注册会员
2015/6/9 9:02:16
7楼: 不过XE8 好像不支持 方向传感器 和 光线传感器需要修改代码吧
----------------------------------------------
学DELPHI http://www.studydelphi.com
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2015/6/10 9:17:55
8楼: 楼主,补丁到底打了没有?
----------------------------------------------
(C)(P)Flying Wang
作者:
男 yuzhenguo0 (金远见) ▲▲▲△△ -
注册会员
2015/6/10 13:09:51
9楼: 我前天在官方下的XE7 50版本
----------------------------------------------
学DELPHI http://www.studydelphi.com
作者:
男 yuzhenguo0 (金远见) ▲▲▲△△ -
注册会员
2015/6/10 13:10:02
10楼: 8楼不信的话可以 试试
----------------------------------------------
学DELPHI http://www.studydelphi.com
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2015/6/10 13:21:55
11楼: 你打了就打了,我信不信都解决不了你的问题。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 szlbz (szlbz) ★☆☆☆☆ -
盒子活跃会员
2015/6/10 15:46:18
12楼: android 5.0下用xe7+5.0补丁振动正常。
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2015/6/10 15:55:34
13楼: 多谢楼上测试。
不过,也许个别手机,他就不正常。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 lsh341999 (虫子) ▲▲▲△△ -
注册会员
2016/1/11 14:17:59
14楼: 请问:
5.0补丁?补丁在哪下载?
我把SDK都更新了一遍
D10版本编译一遍还是有楼主那个问题,4.4又是正常的
----------------------------------------------
就怕想不到,没有做不到的
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2016/1/11 14:52:17
15楼: 虽然讨厌你们挖坟。
但是,这个问题,一部分手机是 要求你给 震动权限。
不给会闪退。

大部分手机,是不需要这个权限的。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2016/1/11 14:57:30
16楼: 有人([珠海]Delphi(304519161))说
LVibrator:=TJVibrator.Wrap((SharedActivity.getSystemService(TJActivity.javaClass.VIBRATOR_SERVICE ) as iLocalObject).GetObjectID );//引用震动

这样写,个别机器会闪退。

需要分开写。

obj := SharedActivity.getSystemService(TJActivity.javaClass.VIBRATOR_SERVICE );

if obj = nil then 出问题了。
LVibrator:=TJVibrator.Wrap((obj as iLocalObject).GetObjectID );//引用震动
----------------------------------------------
(C)(P)Flying Wang
作者:
男 lsh341999 (虫子) ▲▲▲△△ -
注册会员
2016/1/11 15:35:56
17楼: Procedure ExecVibrator(Ams:Integer);
var
  LObj:IInterface;
  LVibrator: JVibrator;
begin
  //Exit;//暂时取消震动感应,安卓5.0版本闪退
  LObj:=SharedActivity.getSystemService(TJActivity.JavaClass.VIBRATOR_SERVICE);
  if LObj<>Nil then
  Begin
    LVibrator := TJVibrator.Wrap((LObj as ILocalObject).GetObjectID);//调用振动
    if LVibrator.hasVibrator then
    LVibrator.vibrate(Ams);
  End;
end;
分开了,权限也加上去了。还是闪退
只能暂时先取消震动感应功能
----------------------------------------------
就怕想不到,没有做不到的
作者:
男 lsh341999 (虫子) ▲▲▲△△ -
注册会员
2016/1/11 15:37:20
18楼: 虽然不影响使用,但影响操作体验
这问题先放一边,
谢谢16楼
----------------------------------------------
就怕想不到,没有做不到的
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2016/1/11 15:40:54
19楼: 请 DEBUG 一下,哪一行代码闪退。
找不到代码,就免谈。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2017/12/26 8:34:19
20楼: 由于楼主懒得去 debug 自然就没有解决。

但是这个问题遇到的人不少,有一个人终于去 DEBUG 了(大概也是 2016年吧),找到了问题的所在,下面的帖子有解决办法(当时解决了,我早就不记得这个帖子了)。

关于 调用 JNI JAR java 的说明和注意事项,调用第 靠写不下了
http://2pascal.com/forum.php?mod=viewthread&tid=1384&fromuid=4
(出处: 2Pascal-新时代的Pascal)
----------------------------------------------
(C)(P)Flying Wang
作者:
男 a200332 (0) ▲▲▲△△ -
注册会员
2017/12/28 23:12:07
21楼: 忘了解决办法了,安卓4.4 以前 是这样 调用震动的,但是5.0以后 就不是 这样了,
LVibrator:=TJVibrator.Wrap((SharedActivity.getSystemService(TJActivity.javaClass.VIBRATOR_SERVICE ) as iLocalObject).GetObjectID );//引用震动

也就是上面这一句,好像是 安卓 系统库 里面 获取的方式 改变了
----------------------------------------------
-
作者:
男 abcjingtong (jingtong) ▲▲▲▲△ -
注册会员
2018/1/1 3:24:47
22楼: @a200332,能帮忙查查怎么解决吗,折腾到现在这个点也没解决。
----------------------------------------------
18114532@qq.com
作者:
男 abcjingtong (jingtong) ▲▲▲▲△ -
注册会员
2018/1/3 12:26:41
23楼: 求人不如求已,想办法找了个5.1系统真机,经过折腾,正确的方法如下,致所有执着研究的朋友。
procedure Vibrate;

{$IFDEF Android}
  //生成振动规律数组,如AIntArr 为[500, 1000, 2000, 3000]表示等半秒 -> 震1秒 -> 等2秒 -> 震3秒,数字单位为毫秒。
  function GetVibratorArray(const AIntArr: array of Int64): TJavaArray<Int64>;
  var
    LIndex: Integer;
  begin
    Result := TJavaArray<Int64>.Create(Length(AIntArr));
    for LIndex := Low(AIntArr) to High(AIntArr) do
      Result.Items[LIndex] := AIntArr[LIndex];
  end;

var
  LVibratorObj: JObject;
  LVibrator: JVibrator;
  LJavaArray: TJavaArray<Int64>;
begin
  LVibratorObj := SharedActivityContext.getSystemService(TJContext.javaClass.VIBRATOR_SERVICE);
  LVibrator := TJVibrator.Wrap((LVibratorObj as ILocalObject).GetObjectID);//引用震动
  if not LVibrator.hasVibrator then
  begin
    Showmessage('手机不支持震动');
    Exit;
  end;
   //LVibrator.vibrate(500);//震动200ms
  LJavaArray := GetVibratorArray([200, 200, 200, 200]);//指出振动规律
  LVibrator.vibrate(LJavaArray, -1);//不重复,只按振动规律振动一个循环
end;
----------------------------------------------
18114532@qq.com
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行35.15625毫秒 RSS