gpt4 book ai didi

服务中的 Android 蓝牙

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:43:14 28 4
gpt4 key购买 nike

我有一个服务,理论上可以在没有关联 Activity 的情况下工作(因为“服务”适用于 Android 平台)。

此服务使用蓝牙,特别是注册一个具有给定名称的蓝牙服务来监听通信。当然,它必须启用蓝牙才能工作。

同样如蓝牙 api 文档所示,我正在使用 BluetoothAdapter.ACTION_REQUEST_ENABLE 提示用户启用蓝牙,以防它尚未打开。不过,这是一个 Activity ,因此需要从另一个 Activity 中调用,即:

Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
InstanceOfAnActivity.startActivity(enableIntent);

我想要实现的是让服务(例如,在启动时启动)与任何 Activity 完全分离,因此不会有 InstanceOfAnActivity 启动指示用户打开蓝牙的弹出窗口。

现在,我知道有对 BluetoothAdapter.enable() 的(臭名昭著的)调用,但正如文档所说,不应直接调用它。

那么,对于这个困境有什么建议/解决方案吗? (也许这很简单,我只是错过了一些东西......)

最佳答案

startActivity() 严格来说不是一个 Activity 方法 - 它是一个 Context 方法,由 Activity Service 继承。不过,有一点需要注意 - 正如 Service.startActivity() 文档中指出的那样,“如果从 Activity Context 外部调用此方法,则 Intent 必须包含FLAG_ACTIVITY_NEW_TASK 启动标志”。

因此,将“上下文”绑定(bind)到服务实例后,以下内容应该起作用:

Intent btIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
btIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(btIntent);

关于服务中的 Android 蓝牙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2413019/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com