Android AltBeacon示例在模拟器上运行的问题

Android AltBeacon示例在模拟器上运行的问题,android,ibeacon,altbeacon,Android,Ibeacon,Altbeacon,我正在使用Android Studio(IntelliJ)IDE构建一个Android应用程序,它使用AltBeacon来检测信标。我正在试用这个示例,并试图了解它背后的基本原理。我正在运行android模拟器的示例(ADT1.1.0和Gradle2.2.1)。当我打开TimedBeaconSimulator时,我可以在单击开始测距后看到它们。我注意到有些事情有点让人困惑- a) 它始终显示Id3:2和Id3:3,而从不显示1和4,尽管它们都已添加到信标列表中 b) 当应用程序关闭时,它会崩溃,

我正在使用Android Studio(IntelliJ)IDE构建一个Android应用程序,它使用AltBeacon来检测信标。我正在试用这个示例,并试图了解它背后的基本原理。我正在运行android模拟器的示例(ADT1.1.0和Gradle2.2.1)。当我打开
TimedBeaconSimulator
时,我可以在单击
开始测距后看到它们。我注意到有些事情有点让人困惑-

a) 它始终显示
Id3:2
Id3:3
,而从不显示1和4,尽管它们都已添加到信标列表中

b) 当应用程序关闭时,它会崩溃,不知道为什么

c) 据我所知,
监控活动
用于检测背景中的信标。但事实并非如此。它不是为检测模拟信标(作为样本的一部分)而构建的吗?我尝试在
AndroidManifest.xml
()中添加这些行,但在gradle构建中出现以下错误-

 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
如果它返回true,我将在代码的下面添加一行-

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.");            }
    }
致:


这将花费30秒来检测第一个信标。然后,在模拟器中启动应用程序并点击home按钮将其置于后台。在30秒内,你应该会看到应用程序在信标检测时弹出。

我现在已经开始思考(a)点。我仍然面临着应用程序在点击主页按钮或使用任务切换时关闭的问题。错误为“尝试在空对象引用上调用虚拟方法”android.bluetooth.le.BluetoothLeScanner android.bluetooth.BluetoothAdapter.getBluetoothLeScanner()。我不确定这是否仅在模拟器上。此外,我还原了androidmanifest并将timedbeacon中的延迟从0更改为30,但即使在应用程序已打开时30秒后自动调用monitoringactivity,但在应用程序处于后台时不会。这可能是由于上面的错误造成的。请尝试添加
beaconManager.setAndroidLScanningDisabled(true)BeaconReferenceApplication.java
的onCreate方法中,在
BeaconManager-BeaconManager=org.altbeacon.beacon.BeaconManager.getInstanceForApplication(该应用程序)行之后的右侧。这应该可以解决崩溃问题,这是由于Android 5 API处于活动状态时与使用BeaConsumulator不兼容造成的。同时,我在这里提出了一个问题来解决这个不兼容问题:这是可行的。但有一个问题-如果我的目标是API<21,它会起作用吗。我需要检查应用程序运行的平台,然后添加条件,还是自动添加条件?该库在API 19+中运行良好。如果目标设备使用较早的Android版本,则需要在进行API调用之前检查此版本。详情请参见此处:
    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.");            }
    }
0, 10, TimeUnit.SECONDS
30, 10, TimeUnit.SECONDS