安卓10,唤醒

标签 android delphi firemonkey

这里有一个支持消息传递的应用程序。虽然我可以在后台下载消息,但如果屏幕关闭,振动将不起作用。

所以我尝试了这个:

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。

即使屏幕关闭,我也想振动,这可能吗?

谢谢。

最佳答案

我是这样解决的:

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;

关于安卓10,唤醒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66435965/

相关文章:

java - 黑客RadioInfo.java工作

android - 数据库锁定错误sqlite android

android - 这些权限是什么?

delphi - 修正浮点错误

delphi - 如何使 Enter 键在 Delphi FireMonkey 应用程序中表现为一个选项卡?

delphi - Firemonkey控件不绘制

android - 每个列表项 Android 的不同 Intent

delphi - 为什么 OmniThreadLibrary 的 ForEach 会阻塞主线程?

delphi - Indy SMTPServer 在 OnConnect 事件中发送错误消息

德尔福XE2 : Invisible Firemonkey controls in VirtualBox