【问题标题】:Android Play Vibration from Foreground Service来自前台服务的 Android 播放振动
【发布时间】:2020-06-08 04:38:49
【问题描述】:

我在做什么:

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

我想要什么:

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

逻辑:

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

我使用的代码:

我找到了一个代码sn-p来产生振动

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开发新手,请帮我解决这个问题。

【问题讨论】:

    标签: android beacon altbeacon foreground-service vibration


    【解决方案1】:

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

    温馨提示:请注意这些蓝牙距离估计值对于您的使用案例来说足够准确。 OnePointFive 等其他应用程序犯了发送太多虚假通知的错误,导致用户非常不满意。你一定要小心不要重复他们的错误。请参阅my blog post here.

    的滥用蓝牙估计部分

    【讨论】:

    • 我尝试了通知。首先,尽管我使用了 builder.setVibrate(new long[] {500});所以我用了振动器。通知和振动会好一会儿,之后通知抽屉中没有通知,也没有振动。我不知道测距是否停止,尽管当我检查外部接收器时正在发生广播。我没有得到任何与测距相关的日志。手机闲置后是否停止与android studio通信?
    • 通过将过滤器下拉菜单从“仅显示选定的应用程序”更改为“无过滤器”来测试您的“Android 调试桥”LogCat 连接是否处于活动状态。如果调试连接处于活动状态,您将看到来自操作系统的大量日志行。如果您在您的应用程序中看到这一点而没有看到,则可能意味着您的应用程序已被操作系统杀死。您可能需要foreground service 才能在现有的 Android 8+ 上继续运行。另请阅读here
    • 是的,我已经在使用前台服务了。我似乎应用程序设置中的节电选项是罪魁祸首。我没有选择任何限制,它就像一个魅力。我正在使用中国小米设备。
    猜你喜欢
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多