AltBeacon 示例 运行 在模拟器上的问题
Issues with AltBeacon sample running on simulator
我正在使用 Android Studio (IntelliJ) IDE 构建一个 android 应用程序,该应用程序使用 AltBeacon 来检测信标。我正在试用 this 示例并试图了解其背后的基础知识。我是 运行 android 模拟器(ADT 1.1.0 和 gradle 2.2.1)的样本。当我打开 TimedBeaconSimulator
时,我可以在点击 Start Ranging
后看到它们。我注意到有些事情有点令人困惑 -
a) 它总是显示 Id3:2
和 Id3:3
,从不显示 1 和 4,尽管它们都已添加到信标列表中。
b) 当应用程序关闭时,它崩溃了,不知道为什么。
c) 据我了解,MonitoringActivity
用于检测背景中的信标。但它没有发生。它不是为检测模拟信标(样本的一部分)而构建的吗?我尝试在 AndroidManifest.xml
(reference) 中添加这些行,但在 gradle build -
中出现以下错误
Error:(35, 41) Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed : Attribute service#org.altbeacon.beacon.service.BeaconService@exported value=(true) from AndroidManifest.xml:35:41
is also present at org.altbeacon:android-beacon-library:2.1.4:27:13 value=(false)
Suggestion: add 'tools:replace="android:exported"' to <service> element at AndroidManifest.xml:35:9 to override
请帮忙解决这个问题。我对信标很陌生,并试图掌握这些概念。
编辑
David,为了解决由于干扰 Android L BLE 扫描而导致应用程序崩溃的问题,我在我的代码中添加了此检查 -
public boolean IsBLESupportedOnDevice(Context context) {
if (Build.VERSION.SDK_INT >= 19 && context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE))
{
Log.d(TAG, "BLE is supported, so need to disable L scanning");
return true;
}
return false;
}
如果 returns 为真,我将在代码中添加以下行 -
beaconManager.setAndroidLScanningDisabled(true);
你能验证 API 水平和其余条件是否正常吗?
A) 您看不到所有信标的原因是示例代码仅显示测距回调中的第一个信标。如果你想看到它们全部,将测距回调中的代码更改为如下所示:
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
for (Beacon beacon: beacons) {
EditText editText = (EditText)RangingActivity.this
.findViewById(R.id.rangingText);
logToDisplay("I see a beacon "+beacon.toString()+" about "+beacon.getDistance()+" meters away."); }
}
B) 我不确定你所说的 "closing the app" 导致它崩溃是什么意思。您可以点击主页按钮以测试其在后台的运行情况。如果您使用任务切换器终止应用程序,那么是的,这将导致它停止 运行。使用任务切换器终止应用程序后自动重启信标检测很难在模拟器中测试。
C) 您不需要将条目添加到您描述的 AndroidManifest.xml
中。您使用 TimedBeaconSimulator 看到任何信标检测的事实表明您的清单文件设置正确。请删除这些手动添加的条目。 (仅当由于某种原因自动清单合并失败时才需要它们。)
是的,您可以使用 BeaconSimulator
在后台检测信标,但示例 TimedBeaconSimulator 可能不是尝试此操作的最佳方式,因为它会立即检测到信标。为了使这项工作更好,请更改此代码:
0, 10, TimeUnit.SECONDS
至:
30, 10, TimeUnit.SECONDS
这将使检测第一个信标需要 30 秒。然后,在模拟器中启动应用程序并点击主页按钮将其置于后台。在 30 秒内,您应该会看到该应用程序在信标检测时弹出。
我正在使用 Android Studio (IntelliJ) IDE 构建一个 android 应用程序,该应用程序使用 AltBeacon 来检测信标。我正在试用 this 示例并试图了解其背后的基础知识。我是 运行 android 模拟器(ADT 1.1.0 和 gradle 2.2.1)的样本。当我打开 TimedBeaconSimulator
时,我可以在点击 Start Ranging
后看到它们。我注意到有些事情有点令人困惑 -
a) 它总是显示 Id3:2
和 Id3:3
,从不显示 1 和 4,尽管它们都已添加到信标列表中。
b) 当应用程序关闭时,它崩溃了,不知道为什么。
c) 据我了解,MonitoringActivity
用于检测背景中的信标。但它没有发生。它不是为检测模拟信标(样本的一部分)而构建的吗?我尝试在 AndroidManifest.xml
(reference) 中添加这些行,但在 gradle build -
Error:(35, 41) Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed : Attribute service#org.altbeacon.beacon.service.BeaconService@exported value=(true) from AndroidManifest.xml:35:41
is also present at org.altbeacon:android-beacon-library:2.1.4:27:13 value=(false)
Suggestion: add 'tools:replace="android:exported"' to <service> element at AndroidManifest.xml:35:9 to override
请帮忙解决这个问题。我对信标很陌生,并试图掌握这些概念。
编辑
David,为了解决由于干扰 Android L BLE 扫描而导致应用程序崩溃的问题,我在我的代码中添加了此检查 -
public boolean IsBLESupportedOnDevice(Context context) {
if (Build.VERSION.SDK_INT >= 19 && context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE))
{
Log.d(TAG, "BLE is supported, so need to disable L scanning");
return true;
}
return false;
}
如果 returns 为真,我将在代码中添加以下行 -
beaconManager.setAndroidLScanningDisabled(true);
你能验证 API 水平和其余条件是否正常吗?
A) 您看不到所有信标的原因是示例代码仅显示测距回调中的第一个信标。如果你想看到它们全部,将测距回调中的代码更改为如下所示:
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
for (Beacon beacon: beacons) {
EditText editText = (EditText)RangingActivity.this
.findViewById(R.id.rangingText);
logToDisplay("I see a beacon "+beacon.toString()+" about "+beacon.getDistance()+" meters away."); }
}
B) 我不确定你所说的 "closing the app" 导致它崩溃是什么意思。您可以点击主页按钮以测试其在后台的运行情况。如果您使用任务切换器终止应用程序,那么是的,这将导致它停止 运行。使用任务切换器终止应用程序后自动重启信标检测很难在模拟器中测试。
C) 您不需要将条目添加到您描述的 AndroidManifest.xml
中。您使用 TimedBeaconSimulator 看到任何信标检测的事实表明您的清单文件设置正确。请删除这些手动添加的条目。 (仅当由于某种原因自动清单合并失败时才需要它们。)
是的,您可以使用 BeaconSimulator
在后台检测信标,但示例 TimedBeaconSimulator 可能不是尝试此操作的最佳方式,因为它会立即检测到信标。为了使这项工作更好,请更改此代码:
0, 10, TimeUnit.SECONDS
至:
30, 10, TimeUnit.SECONDS
这将使检测第一个信标需要 30 秒。然后,在模拟器中启动应用程序并点击主页按钮将其置于后台。在 30 秒内,您应该会看到该应用程序在信标检测时弹出。