Android 安卓10,醒醒

Android 安卓10,醒醒,android,delphi,firemonkey,Android,Delphi,Firemonkey,这里有一个支持消息传递的应用程序。虽然我可以在后台下载信息,但如果屏幕关闭,振动就不起作用 所以我试了一下: procedure TMain.doVibration(milisec: Integer); var Vibrator : JVibrator; PowerManager : JPowerManager; begin PowerManager := TJPowerManager.Wrap(TAndroidHelper.Context.getSystemService(TJCo

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

所以我试了一下:

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;

您可能需要查看:我已回滚您的编辑。此处不适合编辑问题以添加解决方案。如果您已经找到了解决方案,并希望与其他人分享,请在下面提供的空白处写下答案。有关更多信息,请参阅。(您可以从中的回滚问题复制代码和文本。)@KenWhite谢谢