【问题标题】:Sorting array by beacon streight按信标对数组进行排序
【发布时间】:2015-09-06 14:19:58
【问题描述】:

我有几个信标来娱乐。我想按强度 rssi 列出它们。所以基本上他们会改变列表中的位置,这取决于接收器在一段时间内与信标的距离,例如每 10 秒。 有什么更好的方法,使用 sqllite 并保存地址信标和直接 rssi,然后对它们进行排序,或者在某个数组中执行此操作? 有没有办法对数组中的项目进行排序,在我的示例中,信标的地址取决于 rssi?

【问题讨论】:

    标签: android arrays sorting ibeacon


    【解决方案1】:

    使用Android Beacon Library,您可以通过RSSI 对远程信标进行排序,代码如下:

    public void didRangeBeaconsInRegion(final Collection<Beacon> beacons, Region region) {
        ArrayList<Beacon> sortedBeacons = new ArrayList<Beacon>(beacons);
        Collections.sort(sortedBeacons, new Comparator<Beacon>() {
    
            @Override
            public int compare(Beacon beacon0, Beacon beacon1) {
                return new Integer(beacon0.getRssi()).compareTo(new Integer(beacon1.getRssi()));
            }
    
        });
    
        // Add code here to update display with sortedBeacons
    }
    

    【讨论】:

    • 我使用 Android Beacon Lib,但在您的示例中,我不知道为什么在 sortedBeacons 中总是只有一个信标?
    • 如果sortedBeacons ArrayList 中只有一个信标,那么这意味着传递给didRangeBeaconsInRegion 方法的信标集合中只有一个信标。这表明您只有一个可见的信标与您定义的Region. 匹配
    • 好的,我想我知道出了什么问题。我的信标只有不同的名称(字符串),所以在数组中他只显示一个位置,我不知道为什么?每个信标都有不同的 MAC 地址。当我在它们出现的每个信标中更改次要值时。但是排序不起作用。我的计划是让信标具有不同的名称和相同的其余值。是否有可能或每个信标必须具有不同的次要或主要值才能进行排序?
    • 在 Android Beacon LIbrary 的 2.3 以上版本中,您可以设置Beacon.setHardwareEqualityEnforced(true);,这将导致具有不同 mac 地址的广告被视为不同的信标。如果您不设置此项,则默认行为是将传输相同标识符的两个硬件设备视为单个信标。
    【解决方案2】:

    使用数组,因为数据的寿命很短,因此数据库开销不值得。然后使用Collections.sort(List, Comparator) Comparator 比较单个优势。要每 10 秒运行一次,请使用 HandlerpostDelayed

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      相关资源
      最近更新 更多