首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓10,WakeUP

安卓10,WakeUP
EN

Stack Overflow用户
提问于 2021-03-02 16:40:51
回答 1查看 111关注 0票数 1

我在这里找到了一个支持消息传递的应用。虽然我可以在后台下载消息,但如果屏幕关闭,振动就不会工作。

所以我试了一下:

代码语言:javascript
复制
procedure TMain.doVibration(milisec: Integer);
var Vibrator : JVibrator;
    PowerManager : JPowerManager;
begin
  PowerManager := TJPowerManager.Wrap(TAndroidHelper.Context.getSystemService(TJContext.JavaClass.POWER_SERVICE));

  if PowerManager.isInteractive = false then PowerManager.wakeUp(1000);

  Vibrator := TJVibrator.Wrap((SharedActivityContext.getSystemService(TJContext.JavaClass.VIBRATOR_SERVICE) as ILocalObject).GetObjectID);
  Vibrator.vibrate(milisec);
end;

不幸的是,这并不起作用,大多数时候它只是锁定了我的应用程序。有时我会收到权限错误。在Delphi中,我将WAKE_LOCK的权限设置为true。

我只是想在屏幕关闭的情况下振动,这可能吗?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-03-03 18:05:24

我是这样解决的:

代码语言:javascript
复制
procedure TMain.MessageVibrate;
var
  Vibrator : JVibrator;
  PowerManager : JPowerManager;
  WakeLock : JPowerManager_WakeLock;
begin
    PowerManager := TJPowerManager.Wrap(TAndroidHelper.Context.getSystemService(TJContext.JavaClass.POWER_SERVICE));

    WakeLock := PowerManager.newWakeLock(TJPowerManager.JavaClass.FULL_WAKE_LOCK or TJPowerManager.JavaClass.ACQUIRE_CAUSES_WAKEUP,StringToJString('NE_PACK'));
    WakeLock.acquire;

    sleep(500); // if the device is in deep sleep, sometimes it does not vibrate if I do not wait

    Vibrator := TJVibrator.Wrap((SharedActivityContext.getSystemService(TJContext.JavaClass.VIBRATOR_SERVICE) as ILocalObject).GetObjectID);
    Vibrator.vibrate(500);

    WakeLock.release;
    WakeLock:=nil;
end;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66435965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档