精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

久久99国产精品一区| 国产自产女人91一区在线观看| 久久久久国产精品无码免费看| 9i看片成人免费高清| 中文字幕欧美日本乱码一线二线| 91精品综合视频| 日本免费观看视| 久久精品99久久无色码中文字幕| 日韩欧美电影一区| 日本成人中文字幕在线| 在线电影福利片| 久久伊人中文字幕| 91九色极品视频| 五月天婷婷导航| 欧美精品一级| 中文字幕久久久av一区| 久久精品aⅴ无码中文字字幕重口| 日韩电影av| 亚洲综合免费观看高清完整版在线| 日本在线播放不卡| 丰满少妇被猛烈进入| 免费高清在线视频一区·| 欧美放荡办公室videos4k| 极品人妻videosss人妻| 精品淫伦v久久水蜜桃| 欧美美女一区二区在线观看| av网站在线观看不卡| 成人影院www在线观看| 国产日产精品一区| 国产精品永久入口久久久| 91亚洲精品国偷拍自产在线观看 | 日本午夜精品一区二区三区电影| 久久91精品国产| 韩国一级黄色录像| 精品免费在线| 亚洲精品网站在线播放gif| xxxx视频在线观看| 成人午夜888| 欧美特级限制片免费在线观看| 日韩小视频在线播放| 丝袜在线视频| 亚洲欧美日韩一区二区| 视频三区二区一区| 精品电影在线| 久久久www成人免费毛片麻豆| 精品乱色一区二区中文字幕| 国产福利第一视频| 国产精品一区二区在线看| 成人欧美一区二区三区在线 | 久久成人国产| 91精品国产高清| 日本少妇bbwbbw精品| 黄色亚洲精品| 久久久噜久噜久久综合| 成人免费看片98| 黄色在线成人| 97精品欧美一区二区三区| 一级aaa毛片| 亚洲另类黄色| 91爱视频在线| 久久国产视频一区| 日韩一区欧美二区| 国产成人福利网站| wwwwww在线观看| 欧美aaaaa成人免费观看视频| 国产精品aaa| 国产91av在线播放| 久久精品国产在热久久| 91九色国产视频| 国产强被迫伦姧在线观看无码| 国产真实乱子伦精品视频| 91精品视频免费观看| 国产精品人人爽| 国产九色精品成人porny| 成人黄色免费片| a级片在线免费看| 成人永久免费视频| 精品国产一区二区三区麻豆免费观看完整版 | 欧美日韩的一区二区| www.久久久久久久久久久| 91精品视频一区二区| 日韩女优av电影在线观看| 91超薄肉色丝袜交足高跟凉鞋| 农村少妇一区二区三区四区五区 | 在线免费一区三区| 爱爱爱爱免费视频| 欧洲精品99毛片免费高清观看| 日韩欧美亚洲国产另类 | 国产欧美精品日韩区二区麻豆天美| 日韩视频精品| 91国内在线| 精品福利免费观看| 国产区二区三区| 日韩激情欧美| 亚洲精品资源在线| 朝桐光av在线| 国产日韩欧美高清免费| 国产欧美精品久久久| 北条麻妃一二三区| 久久久高清一区二区三区| 在线观看国产一区| 草草视频在线| 欧美日本一区二区三区| 一起草在线视频| 亚洲国产不卡| 欧美中文字幕在线观看| 国产一区二区三区成人| av一区二区三区在线| 一区二区三区免费看| 俄罗斯一级**毛片在线播放| 欧美三级在线视频| 精品一区二区视频在线观看| 日韩精品一区二区久久| 97在线视频免费播放| 一本一道人人妻人人妻αv | 一级肉体全黄裸片| 亚洲图片在线| 亚洲最大成人在线| 成人高潮成人免费观看| 舔着乳尖日韩一区| 欧洲在线免费视频| 国产精品自拍区| 久久久久久久久久国产精品| 一级黄色片在线看| 国产性天天综合网| 日本a在线免费观看| 国产免费av国片精品草莓男男| 亚洲精品一区二区久| 日韩福利片在线观看| 韩国精品一区二区| 亚洲成色最大综合在线| 免费电影日韩网站| 精品视频在线播放色网色视频| 久草视频手机在线观看| 国产在线视频精品一区| 亚洲精品中字| 国产精品亚洲d| 亚洲热线99精品视频| 国产第一页在线播放| 国产九色精品成人porny| 亚洲一区二区自拍偷拍| 成人h在线观看| 亚洲人成五月天| 日韩av大片在线观看| 成人av先锋影音| 9色porny| 懂色av一区二区| 久久久伊人日本| 好吊视频一二三区| 亚洲国产aⅴ天堂久久| 无码国产精品久久一区免费| 亚洲视频电影在线| 成人亚洲欧美一区二区三区| 免费网站成人| 538在线一区二区精品国产| 国产一区二区三区视频播放| 蜜桃av一区二区三区电影| 欧洲在线视频一区| 日韩一区二区三区在线免费观看 | 国产偷国产偷亚洲高清97cao| 色屁屁www国产馆在线观看| 欧美一区二区三区思思人| 青青操在线视频观看| 狠狠色2019综合网| 永久域名在线精品| 欧美日韩中出| 欧美激情在线观看视频| 污污网站在线免费观看| 高潮白浆女日韩av免费看| 人妻在线日韩免费视频| 久久久久久久欧美精品| 亚洲欧洲免费无码| 久久久久久久久久久久电影| 欧美激情精品久久久久久| 黑人精品一区二区| 一本到高清视频免费精品| 中文字幕av久久爽一区| 国产一区二区精品在线观看| 亚洲精品国产suv一区88| 久久狠狠久久| 国产精品成人一区二区| 3d玉蒲团在线观看| 日韩av在线免费观看| www.久久网| 亚洲伦在线观看| 精品黑人一区二区三区观看时间| 丝袜国产日韩另类美女| 丰满女人性猛交| 欧美91在线| 国产在线观看精品| 白浆在线视频| 精品国内亚洲在观看18黄| www.黄色小说.com| 色欧美片视频在线观看 | 天天射综合影视| 特级西西www444人体聚色| 国产乱码一区二区三区| 逼特逼视频在线| 51精产品一区一区三区| 九色91在线视频| 伊人久久一区| 91chinesevideo永久地址| 免费黄色网址在线观看| 亚洲电影免费观看高清完整版在线| 伦av综合一区| 亚洲精品乱码久久久久久黑人| 乐播av一区二区三区| 国产酒店精品激情| 蜜臀av免费观看| 最新国产乱人伦偷精品免费网站| 午夜精品亚洲一区二区三区嫩草| 综合久久成人| 国产精品自产拍在线观| 黄色在线网站噜噜噜| 久久久精品久久| 国产私拍精品| 亚洲精品电影久久久| 国产裸体美女永久免费无遮挡| 亚洲综合色区另类av| 殴美一级黄色片| 久久精品网站免费观看| 俄罗斯黄色录像| 国产真实精品久久二三区| 九九热免费精品视频| 国产精品毛片| 成人在线观看你懂的| 久久久久电影| 亚洲永久一区二区三区在线| 中文字幕亚洲影视| 精品在线不卡| 97品白浆高清久久久久久| 91精品国产自产在线老师啪| 日韩高清不卡| 欧美一区二区.| 日韩影院在线| 国产+人+亚洲| 人交獸av完整版在线观看| 久久成人精品一区二区三区| 97人人在线| 亚洲最大中文字幕| 国产一二在线观看| 亚洲色图国产精品| 日本不卡免费播放| 日韩精品久久久久久福利| 日韩在线视频观看免费| 精品国产精品网麻豆系列 | 日韩大陆欧美高清视频区| 性一交一乱一伧老太| 日韩三级av在线播放| 99国产揄拍国产精品| 欧美精品色一区二区三区| 中文字幕在线观看1| 欧美在线视频全部完| 中文字幕+乱码+中文字幕明步| 欧美亚一区二区| 中文字幕永久在线观看| 欧美日韩午夜在线视频| 在线观看黄色国产| 欧美一区二区三区免费大片| 99热这里只有精品在线| 日韩免费福利电影在线观看| 亚洲av无码一区二区乱子伦| 日韩精品一区二区三区蜜臀| 亚洲欧美另类一区| 国产视频久久久| 国产精品久久久久一区二区国产| 一区二区三区视频免费在线观看 | 欧美丰满老妇厨房牲生活 | 亚洲xxx拳头交| 国产精品视频二| 99精品视频免费观看| 日韩av资源在线| 蜜桃视频一区二区| 在线免费黄色小视频| 国产成人h网站| 色呦呦一区二区| 久久久精品中文字幕麻豆发布| 熟女高潮一区二区三区| 国产精品每日更新| 国产一级黄色av| 欧美视频在线观看 亚洲欧| 高潮毛片又色又爽免费| 欧美精品粉嫩高潮一区二区| 亚洲国产精品视频在线| 日韩精品在线视频观看| 欧美r级在线| 97国产真实伦对白精彩视频8| 日本美女一区| 亚洲自拍偷拍色片视频| 欧美交a欧美精品喷水| 日本高清不卡三区| 自拍偷拍欧美专区| 色综合久久久久无码专区| 免费成人美女在线观看.| 日本中文字幕有码| 久久久精品人体av艺术| 欧美三级免费看| 在线观看中文字幕不卡| 国内精品国产成人国产三级| 亚洲精品影视在线观看| 在线视频国产区| 国产成人av在线| 亚洲2区在线| 四虎影视永久免费在线观看一区二区三区 | 国产美女高潮在线观看| 国产精品色视频| 秋霞在线一区| 久久福利一区二区| 日本不卡不码高清免费观看| 精品久久久久久无码人妻| 国产欧美日韩一区二区三区在线观看| 欧美精品videos极品| 欧美这里有精品| 天堂а在线中文在线无限看推荐| 久久精品国产亚洲精品| 日本久久免费| 精品乱码一区二区三区| 亚洲无毛电影| 亚欧美一区二区三区| 国产女主播一区| 国语对白永久免费| 亚洲大胆美女视频| 午夜伦理在线视频| 国产精品丝袜高跟| 九九在线精品| 日本中文字幕网址| 国产福利91精品一区二区三区| 黑人と日本人の交わりビデオ| 疯狂欧美牲乱大交777| 亚洲国产欧美另类| 精品自在线视频| 亚洲色图图片| 亚洲国产欧美一区二区三区不卡| 亚洲一区二区三区四区五区午夜| 波多野吉衣在线视频| 综合激情成人伊人| 一级黄在线观看| 精品国产依人香蕉在线精品| 精品欧美日韩精品| 日韩欧美视频一区二区| 视频一区二区三区在线| 日韩中文字幕电影| 日韩人体视频一二区| 十九岁完整版在线观看好看云免费| 欧美精品激情在线| av综合网页| 丁香六月激情婷婷| 9久草视频在线视频精品| 精品无码黑人又粗又大又长| 欧美成人女星排行榜| 美女尤物在线视频| 国产精品yjizz| 亚洲精选91| 精品人妻一区二区三区日产乱码卜| 午夜不卡av免费| 深夜福利在线看| 日本久久91av| 四虎国产精品免费观看| 午夜视频在线网站| 亚洲图片你懂的| 亚洲第一色视频| 亚洲91精品在线观看| 亚洲精品小区久久久久久| 欧美黄色一级片视频| 欧美激情中文不卡| 99久久精品免费看国产交换| 欧美日韩国产二区| 久久综合另类图片小说| 久久美女福利视频| 日本一区免费视频| 91资源在线视频| 韩国一区二区电影| 精品在线播放| 成人亚洲免费视频| 亚洲一区欧美一区| 日韩午夜影院| 国产精品一区二区久久精品| 欧美在线不卡| 国产真实乱人偷精品| 91久久免费观看| 国产精品剧情| 久久99国产精品| 蜜臀av亚洲一区中文字幕| 欧美日韩中文字幕在线观看| 日韩国产精品视频| 国产乱子精品一区二区在线观看| 中国老女人av| 2020国产精品自拍| 国产一区二区小视频| 韩国精品美女www爽爽爽视频| 国产一区二区三区网| 欧美视频亚洲图片| 欧美日韩国产精品一区二区三区四区 | 亚洲自拍另类| 男人天堂网站在线| 91小视频在线免费看| 一级片在线免费观看视频| 久久久久久高潮国产精品视| 欧美手机在线| caopor在线|