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

时间:2015-04-12 21:44:22

标签: android ibeacon altbeacon

我正在使用Android Studio(IntelliJ)IDE构建一个使用AltBeacon来检测信标的Android应用程序。我正在尝试this样本,并尝试了解其背后的基础知识。我正在运行android模拟器(ADT 1.1.0和gradle 2.2.1)的示例。当我打开TimedBeaconSimulator时,我会在点击Start Ranging后看到它们。我注意到有些事情让人感到困惑 -

a)它始终显示Id3:2Id3:3,永远不会显示1和4,但所有这些都会添加到信标列表中。

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

c)据我所知,MonitoringActivity可以检测背景中的信标。但它没有发生。它不是用于检测模拟信标(它是样本的一部分)吗?我尝试在AndroidManifest.xmlreference)中添加这些行,但在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

请帮助解决这个问题。我对信标很新,并试图掌握这些概念。

修改

大卫,为了解决由于干扰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;
 }

如果返回true,我在代码中添加以下行 -

beaconManager.setAndroidLScanningDisabled(true);

您能否验证API级别和其他条件是否良好?

1 个答案:

答案 0 :(得分:0)

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)我不确定你是什么意思&#34;关闭应用程序&#34;导致它崩溃。您可以点击主页按钮在后台测试其操作。如果你使用任务切换器来杀死应用程序,那么是的,这将导致它停止运行。使用任务切换器杀死应用程序后自动重启信标检测很难在模拟器中进行测试。

C)您不需要将条目添加到您描述的AndroidManifest.xml。您使用TimedBeaconSimulator看到任何信标检测的事实表明您的清单文件已正确设置。请删除这些手动添加的条目。 (只有在出于某种原因自动清单合并失败时才需要它们。)

是的,您可以使用BeaconSimulator在后​​台检测信标,但示例TimedBeaconSimulator可能不是尝试此操作的最佳方式,因为它会立即检测到信标。为了更好地工作,请更改以下代码:

0, 10, TimeUnit.SECONDS

为:

30, 10, TimeUnit.SECONDS

这将使得检测第一个信标需要30秒。然后,在模拟器中启动应用程序并点击主页按钮将其置于后台。在30秒内你应该看到应用程序弹出信号检测。