AndroidManifest BroadcastReceiver用于外部SDK



我正在尝试将Estimote蓝牙低功耗信标集成到现有的(大型)Android 12应用程序中。问题是清单合并失败:

Manifest merger failed : android:exported needs to be explicitly specified for element <receiver#com.estimote.proximity_sdk.api.TriggerBroadcastReceiver>. Apps targeting Android 12 and higher are required to specify an explicit value for `android:exported` when the corresponding component has an intent filter defined. 

从SDK中我了解到他们实现了Android BroadcastReceiver。因此,我尝试将以下内容包含到我的AndroidManifest中:

<receiver
android:name="android.content.BroadcastReceiver"
android:enabled="true"
android:exported="false" >
</receiver>

这没有工作,给我仍然是相同的错误。我未能从SDK显式地定义类。我试着:

<receiver
android:name="com.estimote.proximity_sdk.api.TriggerBroadcastReceiver"
android:enabled="true"
android:exported="false" >
</receiver>

但我得到:Unresolved class 'TriggerBroadcastReceiver'

我真的不明白为什么定义Android BroadcastReceiver是不够的,以及我如何从SDK中定义TriggerBroadcastReceiver类的接收器。

任何想法,提示,解释都非常感谢!

1.0.7版本的Estimote SDK似乎不支持Android API level 31。看起来卡在26了!幸运的是,有一些方法可以将清单调整为希望需要的内容。

首先,添加到您的清单的application元素:

<receiver android:name="com.estimote.proximity_sdk.api.TriggerBroadcastReceiver" 
android:exported="false">
<intent-filter>
<action android:name="com.estimote.proximity_trigger" />
</intent-filter>
</receiver>

如果可以的话转到声明"对于上述TriggerBroadcastReceiver,那么它应该正确连接。我无法复制你对Unresolved class 'TriggerBroadcastReceiver'的发现。希望这能解决你眼前的问题。但在那之后,你可能需要更多的东西来允许BLE扫描继续进行。

假设您的最小SDK版本为30或更低,为了覆盖Estimote对以下权限的不合格使用,您可以添加:

<uses-permission android:name="android.permission.BLUETOOTH"
android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
android:maxSdkVersion="30" />

更重要的是,我相信您需要在清单中添加BLUETOOTH_SCANACCESS_FINE_LOCATION权限位置,这是在API 31或更高版本上扫描时需要的:

<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

在应用程序代码中,您将需要请求BLUETOOTH_SCANACCESS_FINE_LOCATION权限。(位置很好,因为Beacons确实可以提供物理位置!)如果我理解正确的话,Estimote SDK允许扫描通过前台服务在后台持续存在,所以你不需要与ACCESS_BACKGROUND_LOCATION混淆。

或者,你可以在你的应用程序中瞄准API 30,它不强制exported接收器属性规则,并且不使用BLUETOOTH_SCANACCESS_FINE_LOCATION进行BLE扫描。

警告:我无法测试,因为我不是Estimote用户。但至少我的应用程序构建和运行。


蓝牙权限:目标Android 12或更高

最新更新