/** * 设置距离计算模型 * * @param distanceModelUpdateUrl null 使用asserts/model-distance-calculations.json; * 否则使用url指定的网上模型文件,如"http://data.altbeacon.org/android-distance.json" */ public void setDefaultDistanceCalcuator(String distanceModelUpdateUrl) { /** * 读取应用程序asserts/model-distance-calculations.json,在应用程序私有数据空间写入同名文件。 * java/org/altbeacon/beacon/distance/ModelSpecificDistanceCalculator.java的loadModelMapFromFile()读取此文件,以构造缺省模型。 */ if (distanceModelUpdateUrl == null) { try { String jsonString = stringFromAssertFile(); // 读取asserts/model-distance-calculations.json boolean ok = saveJson(jsonString); // 将距离模型json数据写入应用程序私有空间中的文件:CONFIG_FILE。 if (ok) { LogManager.d(TAG, "setDefaultDistanceCalcuator ok,from asserts/" + CONFIG_FILE); } else { LogManager.d(TAG, "setDefaultDistanceCalcuator error,from asserts/" + CONFIG_FILE); } } catch (IOException e) { LogManager.d(TAG, "Exception:" + e.toString()); } // 设置一个虚假的url,目的是引起BeaconService中调用ModelSpecificDistanceCalculator()-->loadModelMap()-->在应程序私有空间找CONFIG_FILE // 由于以上已经存储了这个文件,因此,绑定BeaconService后,执行上述序列,loadModelMap()能够成功找到该文件。 // 鉴于此,必须在绑定BeaconService前执行此函数。loadModelMap()仅在第一次调用时才检查此文件,一旦文件已经写入,下一次就不检查了。因此测试时,每次要完全卸载程序,才能验证此程序的逻辑。 BeaconManager.setDistanceModelUpdateUrl("nodistanceModelUpdateUrl"); } else { // BeaconService中调用ModelSpecificDistanceCalculator()设置距离计算模型 BeaconManager.setDistanceModelUpdateUrl(distanceModelUpdateUrl); LogManager.d(TAG, "setDefaultDistanceCalcuator, from " + distanceModelUpdateUrl); } }