精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

HarmonyOS分布式應用智能三角警示牌解讀

開發 前端 分布式 OpenHarmony
我們設計了智能移動三角警示牌以解決該問題。本智能三角警示牌通過手機HAP可以與其相連,控制運動方向和速度,使其停放在事故現場后方合適的位置,從而能夠保障用戶的人身和財產安全。

[[439635]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

前言

HarmonyOS是 一款面向萬物互聯時代的、全新的分布式操作系統,其分布式技術能力(分布式軟總線、分布式設備虛擬化、分布式數據管理、分布式任務調度)一直受到廣大開發者的極大關注,使用戶對HarmonyOS有著很高的贊許。

我們開發的《分布式智能三角警示牌應用》,以在日常生活中,公路上發生交通事故時通常是事故相關人員手持三角反光警示牌步行至目的地處放置,人為放置具有引發二次事故的風險,因此我們設計了智能移動三角警示牌以解決該問題。本智能三角警示牌通過手機HAP可以與其相連,控制運動方向和速度,使其停放在事故現場后方合適的位置,從而能夠保障用戶的人身和財產安全。

當在控制警示牌運動過程中,有緊急事情或其它情況,可以將當前的操作流轉到另外一臺設備中進行操作,其運動軌跡就是通過分布式數據服務來保證兩臺設備間數據的一致性。

效果展示

#星光計劃2.0#HarmonyOS分布式應用智能三角警示牌解讀-鴻蒙HarmonyOS技術社區
#星光計劃2.0#HarmonyOS分布式應用智能三角警示牌解讀-鴻蒙HarmonyOS技術社區

一、創建“智能三角警示牌”HAP工程

1、安裝和配置DevEco Studio

2.1 Release

安裝的鏈接:https://developer.harmonyos.com/cn/develop/deveco-studio

IDE的使用指南,很詳細:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/tools_overview-0000001053582387

我的本案例使用的最新的 2.1.0.501版本,SDK:API Version 5

2、選擇一個模版,創建一個Java Phone應用

#星光計劃2.0#HarmonyOS分布式應用智能三角警示牌解讀-鴻蒙HarmonyOS技術社區

==點擊Next ==

#星光計劃2.0#HarmonyOS分布式應用智能三角警示牌解讀-鴻蒙HarmonyOS技術社區

點擊Finish完成創建HAP工程

3、智能三角警示牌應用包結構

首先完成智能三角警示牌應用包結構設計,結構如下:

#星光計劃2.0#HarmonyOS分布式應用智能三角警示牌解讀-鴻蒙HarmonyOS技術社區 

二、智能三角警示牌應用核心代碼實現

1、config.json權限配置

  1. "reqPermissions": [ 
  2.       { 
  3.         "name""ohos.permission.INTERNET" 
  4.       }, 
  5.       { 
  6.         "name""ohos.permission.GET_NETWORK_INFO" 
  7.       }, 
  8.       { 
  9.         "name""ohos.permission.MICROPHONE" 
  10.       }, 
  11.       { 
  12.         "name""android.permission.RECORD_AUDIO" 
  13.       }, 
  14.       { 
  15.         "name""ohos.permission.DISTRIBUTED_DATASYNC" 
  16.       }, 
  17.       { 
  18.         "name""ohos.permission.servicebus.ACCESS_SERVICE" 
  19.       }, 
  20.       { 
  21.         "name""com.huawei.hwddmp.servicebus.BIND_SERVICE" 
  22.       }, 
  23.       { 
  24.         "name""ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE" 
  25.       }, 
  26.       { 
  27.         "name""ohos.permission.GET_DISTRIBUTED_DEVICE_INFO" 
  28.       }, 
  29.       { 
  30.         "name""ohos.permission.GET_BUNDLE_INFO" 
  31.       }, 
  32.       { 
  33.         "name": "ohos.p 
  34. ermission.LOCATION" 
  35.       } 
  36.     ] 

2、分布式數據服務核心代碼

  1. import com.google.gson.Gson; 
  2. import com.google.gson.reflect.TypeToken; 
  3. import com.isoftstone.smartcar.app.common.Constant; 
  4. import com.isoftstone.smartcar.app.model.DrivingMap; 
  5. import com.isoftstone.smartcar.app.model.DrivingRecord; 
  6. import com.isoftstone.smartcar.app.model.ReportRecord; 
  7. import com.isoftstone.smartcar.app.utils.DrivingReportComparator; 
  8. import com.isoftstone.smartcar.app.utils.ReportRecordComparator; 
  9. import com.isoftstone.smartcar.app.utils.StringUtils; 
  10. import ohos.app.Context; 
  11. import ohos.data.distributed.common.*; 
  12. import ohos.data.distributed.device.DeviceFilterStrategy; 
  13. import ohos.data.distributed.device.DeviceInfo; 
  14. import ohos.data.distributed.user.SingleKvStore; 
  15. import ohos.hiviewdfx.HiLog; 
  16. import ohos.hiviewdfx.HiLogLabel; 
  17. import java.util.ArrayList; 
  18. import java.util.List; 
  19. /** 
  20.  * 分布式數據庫類服務 
  21.  */ 
  22. public class SmartShareService { 
  23.     private static final HiLogLabel label = new HiLogLabel(HiLog.LOG_APP, 0x00201, "SmartshareService"); 
  24.     private static SmartShareService smartShareService; 
  25.     private static SingleKvStore singleKvStore; 
  26.     private static KvManager kvManager; 
  27.     private final Context context; 
  28.     public static SmartShareService getInstance(Context context) { 
  29.         if (smartShareService == null) { 
  30.             smartShareService = new SmartShareService(context); 
  31.         } 
  32.         return smartShareService; 
  33.     } 
  34.     private SmartShareService(Context context){ 
  35.             this.context = context; 
  36.     } 
  37.     /** 
  38.      * 分布式數據庫初始化 
  39.      */ 
  40.     public void init() { 
  41.         KvManagerConfig config = new KvManagerConfig(context); 
  42.         kvManager = KvManagerFactory.getInstance().createKvManager(config); 
  43.         Options options = new Options();        options.setCreateIfMissing(true).setEncrypt(false).setKvStoreType(KvStoreType.SINGLE_VERSION).setAutoSync(true); 
  44.         singleKvStore = kvManager.getKvStore(options, Constant.SMART_SHARE_NAME); 
  45.         HiLog.info(label,"初始化成功!"); 
  46.         //return singleKvStore; 
  47.     } 
  48.     /** 
  49.      * 新增行駛記錄 
  50.      * @param drivingRecord 行駛記錄對象 
  51.      */ 
  52.     public void insertDrivingRecord(DrivingRecord drivingRecord){ 
  53.         Gson gson = new Gson(); 
  54.         String resultJson = gson.toJson(drivingRecord);        singleKvStore.putString(Constant.DRIVING_REPORT_PREFIX+drivingRecord.getId(),resultJson); 
  55.         HiLog.info(label,"新增行駛記錄成功!"); 
  56.     } 
  57.     /** 
  58.      * 批量新增行駛記錄軌跡 
  59.      * @param drivingId 行駛記錄標識 
  60.      * @param drivingMapLst 行駛記錄軌跡列表 
  61.      */ 
  62.     public void insertDrivingMap(String drivingId, List<DrivingMap> drivingMapLst){ 
  63.         Gson gson = new Gson(); 
  64.         String resultJson = gson.toJson(drivingMapLst);        singleKvStore.putString(Constant.DRIVING_MAP_PREFIX+drivingId,resultJson); 
  65.         HiLog.info(label,"批量新增行駛記錄軌跡成功!"); 
  66.     } 
  67.     /** 
  68.      * 新增上報記錄 
  69.      * @param drivingId 行駛記錄標識 
  70.      * @param reportRecord 上報記錄對象 
  71.      */ 
  72.     public void insertReportRecord(String drivingId, ReportRecord reportRecord){ 
  73.         Gson gson = new Gson(); 
  74.         List<Entry> entrys = singleKvStore.getEntries(Constant.REPORT_RECORD_PREFIX+drivingId); 
  75.         if (entrys == null || entrys.size() == 0){ 
  76.             List<ReportRecord> reportRecordLst = new ArrayList<>(); 
  77.             reportRecordLst.add(reportRecord); 
  78.             String resultJson1 = gson.toJson(reportRecordLst);            singleKvStore.putString(Constant.REPORT_RECORD_PREFIX+drivingId,resultJson1); 
  79.             HiLog.info(label,"新增上報記錄成功!"); 
  80.         } else { 
  81.             String resultJson = entrys.get(0).getValue().getString(); 
  82.             List<ReportRecord> reportRecordLst = gson.fromJson(resultJson, new TypeToken<List<ReportRecord>>() {}.getType()); 
  83.             reportRecordLst.add(reportRecord); 
  84.             String resultJson1 = gson.toJson(reportRecordLst); 
  85.             singleKvStore.putString(Constant.REPORT_RECORD_PREFIX+drivingId,resultJson1); 
  86.             HiLog.info(label,"新增上報記錄列表成功!"); 
  87.         } 
  88.     } 
  89.     /** 
  90.      * 設置保險電話 
  91.      * @param key       保險key 
  92.      * @param telphone  保險key對應的值 
  93.      */ 
  94.     public void setupInsuranceTelphone(String key,String telphone){ 
  95.         singleKvStore.putString(Constant.TEL_PREFIX+key,telphone); 
  96.         HiLog.info(label,"設置保險電話成功!"); 
  97.     } 
  98.     /** 
  99.      * 獲取保險電話 
  100.      * @param key 保險電話key 
  101.      * @return 保險電話 
  102.      */ 
  103.     public String getInsuranceTelphone(String key){ 
  104.         String tel = ""
  105.         List<Entry> entrys = singleKvStore.getEntries(Constant.TEL_PREFIX+key); 
  106.         if (entrys != null && entrys.size()>0) { 
  107.             tel = entrys.get(0).getValue().getString(); 
  108.             HiLog.info(label,"獲取保險電話成功!"+tel); 
  109.         } else { 
  110.             HiLog.info(label,"沒有獲取保險電話!"); 
  111.         } 
  112.         return tel; 
  113.     } 
  114.     /** 
  115.      * 設置IP 
  116.      * @param key  IP的key 
  117.      * @param value IP的value 
  118.      */ 
  119.     public void setIp(String key,String value){ 
  120.         singleKvStore.putString(Constant.IP_PREFIX+key,value); 
  121.         HiLog.info(label,"設置IP成功!"); 
  122.     } 
  123.     /** 
  124.      * 獲取IP 
  125.      * @param key  IP的key 
  126.      * @return IP的值 
  127.      */ 
  128.     public String getIp(String key){ 
  129.         String tmpIp = ""
  130.         List<Entry> entrys = singleKvStore.getEntries(Constant.IP_PREFIX+key); 
  131.         if (entrys != null && entrys.size()>0) { 
  132.             tmpIp = entrys.get(0).getValue().getString(); 
  133.             HiLog.info(label,"獲取IP成功!"+tmpIp); 
  134.         } else { 
  135.             HiLog.info(label,"沒有獲取到IP!"); 
  136.         } 
  137.         return tmpIp; 
  138.     } 
  139.     /** 
  140.      * 獲取行駛記錄列表 
  141.      * @return 行駛記錄列表 
  142.      */ 
  143.     public List<DrivingRecord> getDrivingRecords(){ 
  144.         List<DrivingRecord> drivingReporList = new ArrayList<>(); 
  145.         List<Entry> entrys = singleKvStore.getEntries(Constant.DRIVING_REPORT_PREFIX); 
  146.         for(Entry entry:entrys){ 
  147.             String key = entry.getKey(); 
  148.             String value = entry.getValue().getString(); 
  149.             HiLog.info(label,"獲取到行駛記錄的數據:key:" + key+",value:"+value); 
  150.             Gson gson = new Gson(); 
  151.             DrivingRecord drivingRecord = gson.fromJson(value, DrivingRecord.class); 
  152.             //HiLog.info(label,drivingRecord.getId()); 
  153.             drivingReporList.add(drivingRecord); 
  154.         } 
  155.         //排序 
  156.         if (drivingReporList.size() > 0) { 
  157.             DrivingReportComparator drivingReportComparator = new DrivingReportComparator(); 
  158.             drivingReporList.sort(drivingReportComparator); 
  159.         } 
  160.         return drivingReporList; 
  161.     } 
  162.     /** 
  163.      * 獲取行駛記錄軌跡列表 
  164.      * @param drivingId 行駛記錄標識 
  165.      * @return  行駛記錄軌跡列表 
  166.      */ 
  167.     public List<DrivingMap> getDrivingMap(String drivingId){ 
  168.         String resultJson = singleKvStore.getString(Constant.DRIVING_MAP_PREFIX+drivingId); 
  169.         Gson gson = new Gson(); 
  170.  
  171.         return gson.fromJson(resultJson, new TypeToken<List<DrivingMap>>() {}.getType()); 
  172.     } 
  173.     /** 
  174.      * 獲取上報記錄列表 
  175.      * @param drivingId 行駛記錄標識 
  176.      * @return 上報記錄列表 
  177.      */ 
  178.     public List<ReportRecord> getReportRecords(String drivingId){ 
  179.         List<Entry> entrys = singleKvStore.getEntries(Constant.REPORT_RECORD_PREFIX+drivingId); 
  180.         if (entrys == null || entrys.size() == 0){ 
  181.             HiLog.info(label,"獲取上報記錄為空!"); 
  182.             return null
  183.         } else { 
  184.             Gson gson = new Gson(); 
  185.             Entry entry = entrys.get(0); 
  186.             String resultJson = entry.getValue().getString(); 
  187.             List<ReportRecord> reportRecordLst = gson.fromJson(resultJson, new TypeToken<List<ReportRecord>>() {}.getType()); 
  188.             HiLog.info(label,"獲取上報記錄成功!"+reportRecordLst.size()); 
  189.  
  190.             if (reportRecordLst!=null && reportRecordLst.size() > 0) { 
  191.                 //排序 
  192.                 ReportRecordComparator reportRecordComparator = new ReportRecordComparator(); 
  193.                 reportRecordLst.sort(reportRecordComparator); 
  194.             } 
  195.             return reportRecordLst; 
  196.         } 
  197.     } 
  198.     /** 
  199.      * 同步數據 
  200.      */ 
  201.     public void syncData() { 
  202.         List<DeviceInfo> deviceInfoList = kvManager.getConnectedDevicesInfo(DeviceFilterStrategy.NO_FILTER); 
  203.         List<String> deviceIdList = new ArrayList<>(); 
  204.         String deviceId; 
  205.         for (DeviceInfo deviceInfo : deviceInfoList) { 
  206.             deviceId = deviceInfo.getId(); 
  207.             HiLog.info(label,"deviceId = " + deviceId); 
  208.             deviceIdList.add(deviceId); 
  209.         } 
  210.         HiLog.info(label,"deviceIdList.size() = " + deviceIdList.size()); 
  211.         if (deviceIdList.size() > 0) { 
  212.             singleKvStore.sync(deviceIdList, SyncMode.PUSH_ONLY); 
  213.         } else { 
  214.             HiLog.error(label,"沒有共享設備"); 
  215.         } 
  216.     } 
  217.     /** 
  218.      * 注冊回調接口 
  219.      * @param kvStoreObserver  kvStore對象 
  220.      */ 
  221.     public void registerCallback(KvStoreObserver kvStoreObserver) { 
  222.         singleKvStore.subscribe(SubscribeType.SUBSCRIBE_TYPE_ALL, kvStoreObserver); 
  223.     } 
  224.     /** 
  225.      * 清空數據 
  226.      */ 
  227.     public void clearAllData() { 
  228.         List<Entry> entrys = singleKvStore.getEntries(""); 
  229.         if (entrys!=null && entrys.size()>0){ 
  230.             for(Entry entry:entrys){ 
  231.                 singleKvStore.delete(entry.getKey()); 
  232.             } 
  233.             HiLog.info(label,"清空數據成功"); 
  234.         } else { 
  235.             HiLog.info(label,"沒有數據要清空"); 
  236.         } 
  237.     } 
  238.     /** 
  239.      * 從現有的行駛記錄中獲取drivingId 
  240.      * @return 返回行駛記錄標識 
  241.      */ 
  242.     public String getDrivingId(){ 
  243.         String drivingId = ""
  244.         List<Entry> entrys = singleKvStore.getEntries(Constant.DRIVING_REPORT_PREFIX); 
  245.         if (entrys != null && entrys.size() > 0){ 
  246.             List<DrivingRecord> drivingReporList = new ArrayList<>(); 
  247.             for(Entry entry:entrys){ 
  248.                 String value = entry.getValue().getString(); 
  249.                 Gson gson = new Gson(); 
  250.                 DrivingRecord drivingRecord = gson.fromJson(value, DrivingRecord.class); 
  251.                 String dateStr = drivingRecord.getDrivingDate(); 
  252.                 if (StringUtils.isDiffHour(dateStr)){ 
  253.                     drivingReporList.add(drivingRecord); 
  254.                 } 
  255.                 HiLog.info(label,drivingRecord.getId()); 
  256.                 drivingReporList.add(drivingRecord); 
  257.             } 
  258.             if (drivingReporList.size() > 0) { 
  259.                 //排序 
  260.                 DrivingReportComparator drivingReportComparator = new DrivingReportComparator(); 
  261.                 drivingReporList.sort(drivingReportComparator); 
  262.  
  263.                 drivingId = drivingReporList.get(0).getId(); 
  264.                 HiLog.info(label,"找到符合條件的drivingId:"+drivingId); 
  265.             } else { 
  266.                 HiLog.info(label,"沒有找到符合條件的drivingId"); 
  267.             } 
  268.         } else { 
  269.             HiLog.info(label,"行駛記錄為空,沒有找到符合條件的drivingId"); 
  270.         } 
  271.  
  272.         return drivingId; 
  273.     } 

3、行駛記錄代碼

  1. import com.isoftstone.smartcar.app.ResourceTable; 
  2. import com.isoftstone.smartcar.app.model.DrivingRecord; 
  3. import com.isoftstone.smartcar.app.provider.DrivingRecordProvider; 
  4. import com.isoftstone.smartcar.app.service.SmartShareService; 
  5. import ohos.aafwk.ability.AbilitySlice; 
  6. import ohos.aafwk.content.Intent; 
  7. import ohos.aafwk.content.Operation; 
  8. import ohos.agp.components.Component; 
  9. import ohos.agp.components.Image; 
  10. import ohos.agp.components.ListContainer; 
  11. import java.util.List; 
  12. /** 
  13.  * 行駛記錄 
  14.  */ 
  15. public class DrivingRecordsAbilitySlice extends AbilitySlice implements Component.ClickedListener { 
  16.     private ListContainer lcRecords; 
  17.     private SmartShareService shareService; 
  18.     private List<DrivingRecord> drivingRecordList; 
  19.     private DrivingRecordProvider drivingRecordProvider; 
  20.     @Override 
  21.     public void onStart(Intent intent) { 
  22.         super.onStart(intent); 
  23.         super.setUIContent(ResourceTable.Layout_ability_driving_records); 
  24.         initUI(); 
  25.     } 
  26.     private void initUI() { 
  27.         shareService = SmartShareService.getInstance(this); 
  28.         shareService.init(); 
  29.         Image iBack = (Image) findComponentById(ResourceTable.Id_i_back); 
  30.         iBack.setClickedListener(this); 
  31.         lcRecords = (ListContainer) findComponentById(ResourceTable.Id_lc_records); 
  32.         drivingRecordList = getData(); 
  33.         drivingRecordProvider = new DrivingRecordProvider(drivingRecordList, this); 
  34.         lcRecords.setItemProvider(drivingRecordProvider); 
  35.         lcRecords.setItemClickedListener(new ListContainer.ItemClickedListener() { 
  36.             @Override 
  37.             public void onItemClicked(ListContainer listContainer, Component component, int i, long l) { 
  38.                 Intent intent = new Intent(); 
  39.                 DrivingRecord drivingRecord = (DrivingRecord) drivingRecordProvider.getItem(i); 
  40.                 intent.setParam("drivingId", drivingRecord.getId()); 
  41.                 intent.setParam("lat", drivingRecord.getLatitude()); 
  42.                 intent.setParam("lng", drivingRecord.getLongitude()); 
  43.                 Operation operation = new Intent.OperationBuilder() 
  44.                         .withDeviceId(""
  45.                         .withBundleName("com.isoftstone.smartcar.app"
  46.                         .withAbilityName("com.isoftstone.smartcar.app.DrivingRecordsDetailAbility"
  47.                         .build(); 
  48.                 intent.setOperation(operation); 
  49.                 startAbility(intent); 
  50.                 //terminate(); 
  51.             } 
  52.         }); 
  53.     } 
  54.     @Override 
  55.     public void onActive() { 
  56.         super.onActive(); 
  57.         drivingRecordList = getData(); 
  58.         drivingRecordProvider = new DrivingRecordProvider(drivingRecordList, this); 
  59.         lcRecords.setItemProvider(drivingRecordProvider); 
  60.     } 
  61.     @Override 
  62.     public void onForeground(Intent intent) { 
  63.         super.onForeground(intent); 
  64.     } 
  65.     @Override 
  66.     public void onClick(Component component) { 
  67.         if (component.getId() == ResourceTable.Id_i_back) { 
  68.             terminateAbility(); 
  69.         } 
  70.     } 
  71.     private List<DrivingRecord> getData() { 
  72.         return shareService.getDrivingRecords(); 
  73.     } 

4、行駛記錄詳情代碼

  1. import com.isoftstone.smartcar.app.ResourceTable; 
  2. import com.isoftstone.smartcar.app.model.DrivingMap; 
  3. import com.isoftstone.smartcar.app.model.ReportRecord; 
  4. import com.isoftstone.smartcar.app.provider.ReportRecordProvider; 
  5. import com.isoftstone.smartcar.app.service.SmartShareService; 
  6. import com.isoftstone.smartcar.app.utils.CoordinateConverter; 
  7. import com.isoftstone.smartcar.app.widget.carmap.LatLng; 
  8. import com.isoftstone.smartcar.app.widget.carmap.TinyMap; 
  9. import ohos.aafwk.ability.AbilitySlice; 
  10. import ohos.aafwk.content.Intent; 
  11. import ohos.agp.components.Component; 
  12. import ohos.agp.components.Image; 
  13. import ohos.agp.components.ListContainer; 
  14. import ohos.agp.utils.Point; 
  15. import ohos.hiviewdfx.HiLog; 
  16. import ohos.hiviewdfx.HiLogLabel; 
  17. import ohos.multimodalinput.event.KeyEvent; 
  18. import java.util.ArrayList; 
  19. import java.util.List; 
  20. import java.util.Timer; 
  21. import java.util.TimerTask; 
  22.  
  23. /** 
  24.  * 行駛記錄詳情 
  25.  */ 
  26. public class DrivingRecordsDetailAbilitySlice extends AbilitySlice implements Component.ClickedListener { 
  27.     private static final HiLogLabel logLabel = new HiLogLabel(HiLog.LOG_APP, 0x00100, "DrivingRecordsDetailAbilitySlice"); 
  28.  
  29.     private TinyMap map; 
  30.     private String drivingId; 
  31.     private SmartShareService shareService; 
  32.  
  33.     @Override 
  34.     protected void onStart(Intent intent) { 
  35.         super.onStart(intent); 
  36.         super.setUIContent(ResourceTable.Layout_ability_driving_records_detail); 
  37.         initUI(intent); 
  38.     } 
  39.  
  40.     private void initUI(Intent intent) { 
  41.         Image iBack = (Image) findComponentById(ResourceTable.Id_i_back); 
  42.         iBack.setClickedListener(this); 
  43.         map = (TinyMap) findComponentById(ResourceTable.Id_map); 
  44.         ListContainer reportListContainer = (ListContainer) findComponentById(ResourceTable.Id_report_records); 
  45.         drivingId = intent.getStringParam("drivingId"); 
  46.         shareService = SmartShareService.getInstance(this); 
  47.         shareService.init(); 
  48.  
  49.         new Timer().schedule(new TimerTask() { 
  50.             @Override 
  51.             public void run() { 
  52.                 getUITaskDispatcher().asyncDispatch(new Runnable() { 
  53.                     @Override 
  54.                     public void run() { 
  55.                         setMap(); 
  56.                     } 
  57.                 }); 
  58.             } 
  59.         },500); 
  60.  
  61.         List<ReportRecord> reportRecords = shareService.getReportRecords(drivingId); 
  62.         ReportRecordProvider reportRecordProvider = new ReportRecordProvider(reportRecords, this); 
  63.         reportListContainer.setItemProvider(reportRecordProvider); 
  64.     } 
  65.  
  66.     @Override 
  67.     public void onClick(Component component) { 
  68.         if (component.getId() == ResourceTable.Id_i_back) {//present(new DrivingRecordsAbilitySlice(), new Intent()); 
  69.             terminate(); 
  70.         } 
  71.     } 
  72.  
  73.     @Override 
  74.     public boolean onKeyUp(int keyCode, KeyEvent keyEvent) { 
  75.         HiLog.error(logLabel,keyEvent.getKeyCode()+""); 
  76.         if (keyCode==KeyEvent.KEY_BACK){ 
  77.             //present(new DrivingRecordsAbilitySlice(), new Intent()); 
  78.             terminate(); 
  79.             return true
  80.         } 
  81.         return super.onKeyDown(keyCode, keyEvent); 
  82.     } 
  83.  
  84.     private LatLng WGS84ToMercator(LatLng latLng) { 
  85.         return CoordinateConverter.WGS84ToMercator(latLng.getLng(), latLng.getLat()); 
  86.     } 
  87.  
  88.     private void setMap() { 
  89.         map.initMap(); 
  90.         List<DrivingMap> drivingMaps = shareService.getDrivingMap(drivingId); 
  91.  
  92.         LatLng startLatLng0 = new LatLng(Double.parseDouble(drivingMaps.get(0).getLatitude()), Double.parseDouble(drivingMaps.get(0).getLongitude())); 
  93.         LatLng startLatLng = new LatLng((float) WGS84ToMercator(startLatLng0).getLat(), (float) WGS84ToMercator(startLatLng0).getLng()); 
  94.         map.setCenterPoint((float) startLatLng.getLng(), (float) startLatLng.getLat()); 
  95.  
  96.         LatLng endLatLng0 = new LatLng(Double.parseDouble(drivingMaps.get(drivingMaps.size() - 1).getLatitude()), Double.parseDouble(drivingMaps.get(drivingMaps.size() - 1).getLongitude())); 
  97.         LatLng endLatLng = new LatLng((float) WGS84ToMercator(endLatLng0).getLat(), (float) WGS84ToMercator(endLatLng0).getLng()); 
  98.         map.setStartElement((float) startLatLng.getLng(), (float) startLatLng.getLat(), ResourceTable.Media_start_location); 
  99.         map.setEndElement((float) endLatLng.getLng(), (float) endLatLng.getLat(), ResourceTable.Media_end_location); 
  100.         List<LatLng> latLngs = new ArrayList<>(); 
  101.         for (DrivingMap drivingMap : drivingMaps) { 
  102.             LatLng latLng = new LatLng(Double.parseDouble(drivingMap.getLatitude()), Double.parseDouble(drivingMap.getLongitude())); 
  103.             Point p = new Point((float) WGS84ToMercator(latLng).getLng(), (float) WGS84ToMercator(latLng).getLat()); 
  104.             latLngs.add(new LatLng(p.getPointY(), p.getPointX())); 
  105.         } 
  106.         map.setPaths(latLngs); 
  107.     } 

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-12-13 11:07:10

鴻蒙HarmonyOS應用

2021-12-14 14:47:18

鴻蒙HarmonyOS應用

2019-02-13 13:41:07

MemCache分布式HashMap

2020-11-20 09:45:19

HarmonyOS

2013-06-18 14:00:59

HDFS分布式文件系統

2021-01-21 09:45:36

鴻蒙HarmonyOS分布式

2021-11-16 09:38:10

鴻蒙HarmonyOS應用

2021-10-21 10:03:09

鴻蒙HarmonyOS應用

2021-05-28 09:52:00

鴻蒙HarmonyOS應用

2012-07-20 14:40:22

2020-11-06 12:12:35

HarmonyOS

2024-07-26 08:45:54

2019-04-30 14:17:56

中關村零售業創業者

2018-12-14 10:06:22

緩存分布式系統

2021-07-22 10:20:21

鴻蒙HarmonyOS應用

2019-10-10 09:16:34

Zookeeper架構分布式

2020-11-19 11:43:26

HarmonyOS

2021-07-23 08:57:32

鴻蒙HarmonyOS應用

2019-06-19 15:40:06

分布式鎖RedisJava

2023-05-29 14:07:00

Zuul網關系統
點贊
收藏

51CTO技術棧公眾號

中文字幕乱码在线播放| 丰满人妻熟女aⅴ一区| 日韩美女一区二区三区在线观看| 4438成人网| 国产二区视频在线| 国产二区视频在线观看| 国产激情一区二区三区| 97视频在线免费观看| 国产7777777| jizz18欧美18| 欧美日韩在线免费视频| 国产中文字幕二区| 精品视频在线一区二区| 不卡av免费在线观看| 国产免费成人av| av黄色在线看| 日本一区二区三区在线视频| 精品人妻一区二区三区三区四区| 香蕉精品999视频一区二区| 麻豆成人在线看| 国产又大又粗又爽的毛片| 草莓视频一区二区三区| 欧美丰满嫩嫩电影| 男人操女人免费| 不卡的av影片| 一区二区免费视频| av动漫免费观看| 成人jjav| 久久综合色婷婷| 国产精品区一区二区三在线播放| 国产又粗又长又大视频| 久久久久久婷| 4k岛国日韩精品**专区| 久久国产在线视频| 欧美精品自拍| 久久艳片www.17c.com| 舐め犯し波多野结衣在线观看| 国产一区丝袜| 精品国产人成亚洲区| 日本精品一区在线| 外国成人毛片| 欧美三级视频在线播放| 欧美精品一区二区三区免费播放| av女在线播放| 午夜精品久久久久久不卡8050| 神马午夜伦理影院| 福利在线视频网站| 国产精品成人一区二区艾草| 亚洲va韩国va欧美va精四季| 麻豆导航在线观看| 久久久久久久久久久久久女国产乱| 国产一区二区在线网站| av资源免费看| 国产成人精品免费看| 91亚洲人电影| 亚洲成人精品女人久久久| 国产酒店精品激情| 亚洲伊人久久大香线蕉av| 国产高潮流白浆喷水视频| 国产美女精品在线| 亚洲综合色av| 丰满岳乱妇国产精品一区| 粉嫩高潮美女一区二区三区| 鬼打鬼之黄金道士1992林正英| www.桃色av嫩草.com| 国产成人av一区二区三区在线| 9a蜜桃久久久久久免费| 亚洲伦理在线观看| 91小视频在线观看| 欧美成人综合一区| 69久久精品| 亚洲欧美激情在线| 蜜臀av色欲a片无码精品一区| 丁香高清在线观看完整电影视频| 午夜精品久久久久久久久| 国产男女激情视频| 日韩成人精品一区二区三区| 欧美一区日韩一区| 中文字幕一区二区人妻电影丶| 日本午夜精品久久久| 一区三区二区视频| www.99re7| 亚洲麻豆视频| 国产精品欧美一区二区| 超碰人人人人人人| 91蜜桃在线免费视频| 性欧美.com| 黄色在线看片| 欧美性大战久久久| 俄罗斯黄色录像| 国产精品一区2区3区| 久久久成人av| www亚洲视频| 久久福利视频一区二区| 国产精品一区视频| 在线观看的av| 亚洲va欧美va人人爽| 久久婷婷国产91天堂综合精品| 国产精久久久| 亚洲欧美变态国产另类| 国产盗摄一区二区三区在线| 99热免费精品在线观看| 成人黄色午夜影院| 欧美女子与性| 亚洲一区日韩精品中文字幕| 国产精品亚洲a| 日韩欧美激情电影| 中文字幕精品网| 久久高清免费视频| 极品少妇xxxx偷拍精品少妇| 韩国一区二区三区美女美女秀| 91在线看黄| 欧美日韩一区二区在线 | 夜夜精品视频| 国产精品一区二区3区| 亚洲aaaaaaa| 亚洲欧美日韩中文播放| 日韩一级片播放| 噜噜噜狠狠夜夜躁精品仙踪林| www.亚洲人.com| 中文字幕xxxx| 99视频精品在线| 999一区二区三区| av在线播放一区二区| 亚洲网在线观看| 青青青国产在线 | 欧美资源一区| 国产乱码午夜在线视频| 日韩欧美三级在线| 久久久久久视频| 久久99久久精品| 日韩在线三级| 最新日韩一区| 亚洲无线码在线一区观看| 国产精品999久久久| 国产麻豆精品视频| 少妇高潮大叫好爽喷水| 色综合一区二区日本韩国亚洲| 亚洲深夜福利网站| 欧美超碰在线观看| 久久这里只有精品首页| 欧美v在线观看| 欧美a大片欧美片| 69视频在线播放| 日批视频在线播放| 午夜在线成人av| 亚洲一区二区在线免费| 91久久中文| 久久精品第九区免费观看| av中文资源在线资源免费观看| 精品久久久久香蕉网| 久久亚洲精品大全| aaa国产一区| 无码人妻精品一区二区三区在线| 奇米影视777在线欧美电影观看| 国内精品小视频在线观看| 色哟哟中文字幕| 黑人精品xxx一区| 中文字幕免费视频| 蜜桃在线一区二区三区| 椎名由奈jux491在线播放 | 日本精品二区| 看片一区二区| 欧美大成色www永久网站婷| www.com欧美| 亚洲第一综合色| 中文人妻一区二区三区| 日韩不卡免费视频| 中国成人亚色综合网站| 涩涩屋成人免费视频软件| 久久久亚洲精品视频| 视频国产在线观看| 欧美性xxxxxx少妇| 欧美成人精品激情在线视频| 国产69精品久久久久毛片| 亚洲熟妇无码一区二区三区| 亚洲深夜福利在线观看| 国产美女精品视频| 日本一本在线免费福利| 日韩成人在线播放| 中文字幕第三页| 亚洲综合色区另类av| 成年人在线观看av| 极品少妇一区二区三区精品视频| 亚洲 自拍 另类小说综合图区| 亚洲另类春色校园小说| 91精品久久久久久久久久| 8x8ⅹ拨牐拨牐拨牐在线观看| 亚洲香蕉伊综合在人在线视看| 国产农村妇女毛片精品久久| 五月天亚洲婷婷| 五月天婷婷丁香网| av不卡一区二区三区| 免费成人黄色大片| 99精品国产一区二区青青牛奶| 亚洲欧洲另类精品久久综合| 97成人在线| 国产精品爽爽爽| 成年男女免费视频网站不卡| 中文字幕日韩av电影| 韩国中文字幕hd久久精品| 欧美日韩精品一二三区| 日本一级一片免费视频| 综合精品久久久| 中文字幕国产综合| 懂色av一区二区三区蜜臀| 久久久久国产精品熟女影院| 亚洲私拍自拍| 一区二区在线观| 免费视频亚洲| 国产精品日韩一区二区| 婷婷久久免费视频| 国产精品成人一区二区| 天堂√中文最新版在线| 久久精品国产96久久久香蕉| 清纯唯美亚洲色图| 亚洲白虎美女被爆操| 国产老妇伦国产熟女老妇视频| 一本大道久久精品懂色aⅴ| 精品深夜av无码一区二区老年| 国产精品电影院| 国产美女永久免费无遮挡| 91老师片黄在线观看| 日本性生活一级片| 国产成人精品亚洲日本在线桃色 | 国产高清不卡一区| 永久免费的av网站| 日日摸夜夜添夜夜添精品视频| 7777在线视频| 婷婷亚洲图片| 亚洲国内在线| 成人在线免费小视频| 蜜桃视频成人| 久草精品在线| 欧美日韩日本网| 亚洲激情播播| 蜜桃成人在线| 深爱激情综合网| 蜜桃麻豆91| 精品一区三区| 人禽交欧美网站免费| 国产欧美日韩精品一区二区三区 | av电影在线观看| 国产亚洲精品91在线| 黄色网址在线播放| 亚洲天堂网在线观看| 国产一级免费在线观看| 国产亚洲一区二区在线| 国产原创av在线| 色偷偷av一区二区三区乱| 丝袜美腿美女被狂躁在线观看| 中文字幕在线观看亚洲| 免费黄色在线观看| 超碰97人人做人人爱少妇| 成人高清免费在线| 国模吧一区二区三区| 操人在线观看| 日韩av免费一区| 久久xxx视频| 成人激情视频在线观看| 精品一区二区三区亚洲| 不卡视频一区二区| 日韩欧美四区| 色综合视频二区偷拍在线| 久久高清免费| 亚洲熟妇无码av在线播放| 99re国产精品| 婷婷六月天在线| 国内精品免费**视频| 亚洲精品成人无码毛片| 成人av电影免费在线播放| 成年人网站免费在线观看| 日本一区二区久久| 可以直接看的黄色网址| 天天色天天操综合| 中文 欧美 日韩| 欧美mv日韩mv| 韩国三级在线观看久| 日韩视频第一页| 高端美女服务在线视频播放| 国产精品99免视看9| 精品三级久久久| 女同一区二区| 欧美日韩午夜| aaa毛片在线观看| 国产精品正在播放| 无码人妻精品一区二区中文| 亚洲激情中文1区| 久久久久在线视频| 日韩欧美在线网站| 理论在线观看| 欧美国产视频一区二区| 精品欧美一区二区三区在线观看| 成人字幕网zmw| 国产成人精品免费视| 国内精品国产三级国产99| 男女av一区三区二区色多| 肉色超薄丝袜脚交| 久久―日本道色综合久久| 成熟的女同志hd| 在线观看日韩av先锋影音电影院| www.日日夜夜| 日韩有码在线观看| 亚洲三级欧美| 成人免费在线看片| 99热国内精品永久免费观看| 凹凸国产熟女精品视频| 国产精品一二三四| 蜜桃av免费观看| 日韩欧美国产成人| 欧美一级片免费| 欧美成人精品三级在线观看| 蜜桃视频成人m3u8| 久久久久久一区| 伊人狠狠色j香婷婷综合| 91在线第一页| 国产精品国产三级国产aⅴ中文 | 日本精品一区二区三区高清 久久 日本精品一区二区三区不卡无字幕 | 久久久久久久久久毛片| 久久精品一区蜜桃臀影院| jizz国产免费| 日韩视频免费观看高清完整版在线观看 | 69堂精品视频在线播放| 精品综合久久| 99综合在线| 91丨porny丨对白| 亚洲自拍偷拍av| 亚洲精品人妻无码| 色综合久久精品亚洲国产| 激情中国色综合| 色视频一区二区三区| 久久综合五月| 中文字幕第4页| 日韩欧美在线观看视频| 天堂成人在线观看| 国模私拍视频一区| 国产毛片精品| 国产网站免费在线观看| kk眼镜猥琐国模调教系列一区二区 | 色一情一乱一乱一区91av| 欧美极品在线视频| 成人av综合网| av高清在线免费观看| 成人h动漫精品一区二区| 久久久久久久久久久97| 精品免费一区二区三区| 黑人精品视频| 精品久久一区二区三区蜜桃| 国产亚洲毛片| 三上悠亚ssⅰn939无码播放 | 国产区精品区| 91视频免费版污| 亚洲图片激情小说| 性色av蜜臀av| 91精品国产高清自在线| 亚洲男人都懂第一日本| 十八禁视频网站在线观看| 欧美激情在线一区二区三区| 中文字字幕在线观看| 久久精品最新地址| 视频在线一区| 欧美极品欧美精品欧美图片| 欧美韩国一区二区| 国产精品一区二区黑人巨大| 九九热99久久久国产盗摄| 懂色av一区二区| 超碰网在线观看| 中文字幕一区在线观看视频| www.成人精品| 欧洲亚洲在线视频| 91偷拍一区二区三区精品| 人妻体体内射精一区二区| 亚洲国产精品影院| 理论视频在线| 亚洲精品免费av| 国产一区二区三区的电影| 91成人精品一区二区| 日韩一级二级三级精品视频| 蜜桃av在线播放| 一区二区欧美日韩| 成人精品免费视频| 日韩乱码一区二区三区| 欧美成人午夜激情| 精品中文一区| 伊人成人免费视频| 色嗨嗨av一区二区三区| 超碰在线免费公开| 欧美日韩系列| 国产成人免费在线观看不卡| av图片在线观看| 九九热视频这里只有精品| 久久av资源| 香蕉视频1024| 欧美性猛交xxxx乱大交退制版 | 成人国产亚洲精品a区天堂华泰| 狠久久av成人天堂| 国产黄色片在线| 日韩精品视频中文在线观看| 99精品女人在线观看免费视频| 国产一区二区网|