コード例 #1
0
 /**
  * 设置距离计算模型
  *
  * @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);
   }
 }