Android 从前台服务播放振动

Android Play Vibration from Foreground Service

我在做什么:

我正在使用 Android Beacon 库制作一个应用程序。我正在使用 RegionBootstrap 来实现前景测距和 Altbeacon 传输。

我想要的:

我想让 phone 振动假设 500 毫秒,即使我的应用程序是 运行 作为前台服务,我也可以在一定米范围内找到信标。

逻辑:

逻辑很简单,我在特定的时间间隔执行扫描。假设我找到了距离为 1m、1.5m、0.6m 的信标 A、B、C。现在我的阈值距离是0.8m所以只要满足上述条件我就让phone振动,也就是说用户必须出去拉大距离才能停止振动。

我使用的代码:

我找到了一个代码片段来制作振动

import android.os.Vibrator;
...
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 500 milliseconds
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    v.vibrate(VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE));
} else {
    //deprecated in API 26 
    v.vibrate(500);
}

我面临的问题:

当我的应用程序打开时,这非常有效。一旦我关闭应用程序,前台服务继续扫描和传输,就不会出现振动。

我是android开发的新手,请帮我解决这个问题。

Try sending a local notification 在信标附近事件上有振动。这可能会克服 phone 模型振动的背景限制,并为您提供一种确认事件正在触发的简单方法。如果您不希望视觉通知持续存在,您可以在延迟几秒后将其关闭。您甚至可以在一秒左右后重新发送通知以继续振动效果,直到条件消失。

友情提示:请注意这些蓝牙距离估计对于您的用例而言足够准确。 OnePointFive 等其他应用程序犯了发送过多虚假通知的错误,导致用户非常不满意。你一定要小心,不要重蹈他们的覆辙。请参阅 my blog post here.

滥用蓝牙估计 部分