我正在尝试将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_SCAN
和ACCESS_FINE_LOCATION
权限位置,这是在API 31或更高版本上扫描时需要的:
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
在应用程序代码中,您将需要请求BLUETOOTH_SCAN
和ACCESS_FINE_LOCATION
权限。(位置很好,因为Beacons确实可以提供物理位置!)如果我理解正确的话,Estimote SDK允许扫描通过前台服务在后台持续存在,所以你不需要与ACCESS_BACKGROUND_LOCATION
混淆。
或者,你可以在你的应用程序中瞄准API 30,它不强制exported
接收器属性规则,并且不使用BLUETOOTH_SCAN
或ACCESS_FINE_LOCATION
进行BLE扫描。
警告:我无法测试,因为我不是Estimote用户。但至少我的应用程序构建和运行。
蓝牙权限:目标Android 12或更高