0

我想使用 Google 的 Nearby Messages API 发布一条简单的消息,并且我只想使用 BLE,这样就不需要 Nearby Permissions 对话框。我MessagesClient只用NearbyPermissions.BLE标志创建我的:

private MessagesClient messagesClient(Context context) {
    return Nearby.getMessagesClient(context, messageOptions());
}

private MessagesOptions messageOptions() {
    return new MessagesOptions.Builder()
            .setPermissions(BLE)
            .build();
}

public void publish(Context context) {
    mMessagesClient = messagesClient(context);
    mMessagesClient
            .publish(mMessage) // publish without any PublishOptions
            .addOnSuccessListener( // ... )
}

我故意不设置任何PublishOptions对象,因为文档明确指出Strategy.BLE应该仅用于订阅,因为它具有无限 TTL。但是,消息失败并显示以下错误消息:

2807: Missing microphone permission

我尝试对 API 进行一点逆向工程,并使用默认 TTL 为 BLE 创建一个自定义策略对象,但我得到了一个2806: FORBIDDEN错误:

private PublishOptions publishOptions() {
    return new PublishOptions.Builder()
            .setStrategy(strategy())
            .build();
}

private Strategy strategy() {
    return new Strategy.Builder()
            .zze(2)
            .setTtlSeconds(TTL_SECONDS_DEFAULT)
            .build();
}

为什么即使我已明确请求仅 BLE 权限,API 仍需要麦克风权限?(顺便说一句,授予了精细的位置权限)。

4

2 回答 2

1

如果您在发布消息时不必同时广播和扫描,则通过将发现模式设置为“Strategy.DISCOVERY_MODE_BROADCAST”来修改您的自定义发布策略。

private Strategy strategy() {
    return new Strategy.Builder()
            .setDiscoveryMode(Strategy.DISCOVERY_MODE_BROADCAST)
            .setTtlSeconds(TTL_SECONDS_DEFAULT)
            .build();
}

这加上您的仅 BLE 客户端应该允许在没有麦克风权限的情况下发布。

于 2020-05-17T17:59:10.817 回答
0

附近的消息 API 概述

Nearby 使用蓝牙、低功耗蓝牙、Wi-Fi和近超声波音频的组合在设备之间传输唯一的及时配对代码。

因此,您正在使用的 API 期望通过音频进行说话和收听,以进行附近的识别/消息传递。

于 2019-12-02T06:09:09.823 回答