HarmonOS 分散アプリケーションのインテリジェント トライアングル警告サインの解釈

HarmonOS 分散アプリケーションのインテリジェント トライアングル警告サインの解釈

[[439635]]

詳細については、以下をご覧ください。

51CTOとHuaweiが共同で構築したHongmengテクノロジーコミュニティ

https://harmonyos..com

序文

HarmonyOS は、Internet of Everything の時代に向けたまったく新しい分散型オペレーティング システムです。 HarmonyOS の分散技術機能 (分散ソフト バス、分散デバイス仮想化、分散データ管理、分散タスク スケジューリング) は常に開発者から大きな注目を集めており、ユーザーから高く評価されています。

私たちは、日常生活において、道路上で交通事故が発生すると、事故に巻き込まれた人が三角形の反射警告標識を持って目的地まで歩いて設置することが多いという事実に基づいて、「分散型インテリジェント三角形警告標識アプリケーション」を開発しました。手動での設置は二次事故を引き起こすリスクがあるため、この問題を解決するためにインテリジェントな移動式三角警告標識を設計しました。このインテリジェントな三角警告標識は、HAP を介して携帯電話に接続して移動方向と速度を制御し、事故現場の後ろの適切な位置に駐車できるため、ユーザーの人身および財産の安全を確保できます。

警告標識の動作を制御する過程で緊急事態などが発生した場合、現在の操作フローを別の装置に転送して操作することができます。移動軌跡は、分散データ サービスを通じて 2 つのデバイス間のデータの一貫性を確保することを目的としています。

エフェクト表示

1. 「スマートトライアングル警告サイン」HAPプロジェクトを作成する

1. DevEco Studioをインストールして設定する

2.1 リリース

インストールリンク: 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バージョン5を使用しています

2. テンプレートを選択してJava Phoneアプリケーションを作成する

==次へをクリック==

[完了] をクリックして、HAP プロジェクトの作成を完了します。

3. インテリジェント三角警告標識アプリケーションパッケージ構造

まず、インテリジェント三角形警告標識アプリケーションパッケージ構造の設計を完了します。構造は次のとおりです。

2. インテリジェント三角警告標識アプリケーションのコアコードの実装

1. config.json 権限設定

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

2. 分散データサービスコアコード

  1. com.google.gson.Gson をインポートします。
  2. com.google.gson.reflect.TypeToken をインポートします。
  3. com.isoftstone.smartcar.app.common.Constant をインポートします。
  4. com.isoftstone.smartcar.app.model.DrivingMap をインポートします。
  5. com.isoftstone.smartcar.app.model.DrivingRecord をインポートします。
  6. com.isoftstone.smartcar.app.model.ReportRecord をインポートします。
  7. com.isoftstone.smartcar.app.utils.DrivingReportComparator をインポートします。
  8. com.isoftstone.smartcar.app.utils.ReportRecordComparator をインポートします。
  9. com.isoftstone.smartcar.app.utils.StringUtils をインポートします。
  10. ohos.app.Context をインポートします。
  11. ohos.data.distributed.common.* をインポートします。
  12. ohos.data.distributed.device.DeviceFilterStrategy をインポートします。
  13. ohos.data.distributed.device.DeviceInfo をインポートします。
  14. ohos.data.distributed.user .SingleKvStoreをインポートします
  15. ohos.hiviewdfx.HiLog をインポートします。
  16. ohos.hiviewdfx.HiLogLabel をインポートします。
  17. java.util.ArrayList をインポートします。
  18. java.util.List をインポートします。
  19. /**
  20. * 分散データベースサービス
  21. */
  22. パブリッククラス SmartShareService {
  23. プライベート静的最終 HiLogLabel ラベル = 新しい HiLogLabel(HiLog.LOG_APP、0x00201、 "SmartshareService" );
  24. プライベート静的SmartShareService smartShareService;
  25. プライベート静的SingleKvStore singleKvStore;
  26. プライベート静的KvManager kvManager;
  27. プライベート最終コンテキストコンテキスト;
  28. 公共 静的SmartShareService getInstance(コンテキスト コンテキスト) {
  29. スマートシェアサービスnullの場合
  30. smartShareService = 新しい SmartShareService(コンテキスト);
  31. }
  32. smartShareServiceを返します
  33. }
  34. プライベートSmartShareService(コンテキストコンテキスト){
  35. this.context = コンテキスト;
  36. }
  37. /**
  38. * 分散データベースの初期化
  39. */
  40. パブリックvoid init() {
  41. KvManagerConfig config = 新しい KvManagerConfig(コンテキスト);
  42. kvManager = KvManagerFactory.getInstance().createKvManager(config);
  43. オプション options = new Options(); options.setCreateIfMissing( true ).setEncrypt( false ).setKvStoreType(KvStoreType.SINGLE_VERSION).setAutoSync( true );
  44. 単一のKvStore = kvManager.getKvStore(オプション、Constant.SMART_SHARE_NAME);
  45. HiLog.info(label, "初期化に成功しました!" );
  46. // singleKvStoreを返します
  47. }
  48. /**
  49. * 運転記録を追加しました
  50. * @param drivingRecord 運転記録オブジェクト
  51. */
  52. パブリックvoid insertDrivingRecord(DrivingRecord drivingRecord){
  53. Gson を新しい Gson() に変換します。
  54. 文字列 resultJson = gson.toJson(drivingRecord); singleKvStore.putString(Constant.DRIVING_REPORT_PREFIX+drivingRecord.getId(),resultJson);
  55. HiLog.info(label, "新しい運転記録が正常に追加されました!" );
  56. }
  57. /**
  58. * 新しい運転記録トラックを一括で追加
  59. * @param drivingId 運転記録ID
  60. * @param drivingMapLst 運転記録トラックリスト
  61. */
  62. パブリックvoid insertDrivingMap(String drivingId, List<DrivingMap> drivingMapLst){
  63. Gson を新しい Gson() に変換します。
  64. 文字列 resultJson = gson.toJson(drivingMapLst); singleKvStore.putString(Constant.DRIVING_MAP_PREFIX+drivingId、resultJson);
  65. HiLog.info(label, "運転記録トラックを一括追加しました!" );
  66. }
  67. /**
  68. * 報告記録を追加
  69. * @param drivingId 運転記録ID
  70. * @param reportRecord レポートレコードオブジェクト
  71. */
  72. パブリックvoid insertReportRecord(String drivingId, ReportRecord reportRecord){
  73. Gson を新しい Gson() に変換します。
  74. リスト<Entry> エントリ = singleKvStore.getEntries(Constant.REPORT_RECORD_PREFIX+drivingId);
  75. エントリ == null || エントリ.size ( ) == 0 の場合{
  76. リスト<ReportRecord> reportRecordLst = 新しいArrayList<>();
  77. reportRecordLst.add (レポートレコード) ;
  78. 文字列 resultJson1 = gson.toJson(reportRecordLst); singleKvStore.putString(Constant.REPORT_RECORD_PREFIX+drivingId、resultJson1);
  79. HiLog.info(label, "新しいレポートレコードが正常に作成されました!" );
  80. }それ以外{
  81. 文字列 resultJson = entrys.get(0).getValue().getString();
  82. リスト<ReportRecord> reportRecordLst = gson.fromJson(resultJson, 新しい TypeToken<List<ReportRecord>>() {}.getType());
  83. reportRecordLst.add (レポートレコード) ;
  84. 文字列 resultJson1 = gson.toJson(reportRecordLst);
  85. singleKvStore.putString(Constant.REPORT_RECORD_PREFIX+drivingId、resultJson1);
  86. HiLog.info(label, "レポートレコードリストが新しく追加されました!" );
  87. }
  88. }
  89. /**
  90. * 保険の電話番号を設定する
  91. * @param key保険キー 
  92. * @param 電話保険キーに対応する値
  93. */
  94. パブリックvoid setupInsuranceTelphone(文字列キー、文字列電話番号){
  95. singleKvStore.putString(Constant.TEL_PREFIX+キー、電話番号);
  96. HiLog.info(label, "保険の電話番号の設定に成功しました!" );
  97. }
  98. /**
  99. * 保険の電話番号を取得する
  100. * @param key保険電話キー 
  101. * @保険の電話番号を返す
  102. */
  103. パブリック文字列 getInsuranceTelphone(文字列キー){
  104. 文字列 tel = "" ;
  105. リスト<Entry> エントリ = singleKvStore.getEntries(Constant.TEL_PREFIX+ key );
  106. エントリ数 != null && エントリ数.size ()>0 の場合 {
  107. tel = エントリ.get(0).getValue().getString();
  108. HiLog.info(label, "保険の電話番号を正常に取得しました!" +tel);
  109. }それ以外{
  110. HiLog.info(label, "保険の電話番号が取得されませんでした!" );
  111. }
  112. 電話番号を返す;
  113. }
  114. /**
  115. * IPを設定する
  116. * @param key IPキー 
  117. * @param value IP値
  118. */
  119. public void setIp(文字列キー、文字列値){
  120. singleKvStore.putString(Constant.IP_PREFIX+キー、値);
  121. HiLog.info(label, "IP設定に成功しました!" );
  122. }
  123. /**
  124. * IPを取得
  125. * @param key IPキー 
  126. * @return IP値
  127. */
  128. パブリック文字列 getIp(文字列キー){
  129. 文字列 tmpIp = "" ;
  130. リスト<Entry> エントリ = singleKvStore.getEntries(Constant.IP_PREFIX+ key );
  131. エントリ数 != null && エントリ数.size ()>0 の場合 {
  132. tmpIp = エントリ.get(0).getValue().getString();
  133. HiLog.info(label, "IP を正常に取得しました!" +tmpIp);
  134. }それ以外{
  135. HiLog.info(label, "IPが取得されませんでした!" );
  136. }
  137. tmpIpを返します
  138. }
  139. /**
  140. * 運転記録リストを取得
  141. * @運転記録リストを返す
  142. */
  143. パブリックリスト<DrivingRecord> getDrivingRecords(){
  144. リスト<DrivingRecord> drivingReporList = new ArrayList<>();
  145. リスト<Entry> エントリ = singleKvStore.getEntries(Constant.DRIVING_REPORT_PREFIX);
  146. (エントリ entry:entrys){
  147. 文字列キー= entry.getKey();
  148. 文字列値 = entry.getValue().getString();
  149. HiLog.info(label, "運転記録データを取得します: キー:" + key + "、値:" + value);
  150. Gson を新しい Gson() に変換します。
  151. 運転記録 drivingRecord = gson.fromJson(値、 DrivingRecord.class);
  152. //HiLog.info(label,drivingRecord.getId());
  153. 運転記録リストに運転記録を追加します。
  154. }
  155. //選別
  156. 運転レポートリストのサイズ() > 0の場合{
  157. DrivingReportComparator を新しい DrivingReportComparator() に追加します。
  158. 運転レポートリストをソートします(運転レポート比較);
  159. }
  160. drivingReporListを返します
  161. }
  162. /**
  163. * 運転記録トラックリストを取得する
  164. * @param drivingId 運転記録ID
  165. * @運転記録トラックリストを返す
  166. */
  167. パブリックリスト<DrivingMap> getDrivingMap(String drivingId){
  168. 文字列 resultJson = singleKvStore.getString(Constant.DRIVING_MAP_PREFIX+drivingId);
  169. Gson を新しい Gson() に変換します。
  170.  
  171. gson.fromJson(resultJson、新しい TypeToken<List<DrivingMap>>() {}.getType())を返します
  172. }
  173. /**
  174. * レポートレコードリストを取得する
  175. * @param drivingId 運転記録ID
  176. * @returnレポートレコードリスト
  177. */
  178. パブリックリスト<ReportRecord> getReportRecords(String drivingId){
  179. リスト<Entry> エントリ = singleKvStore.getEntries(Constant.REPORT_RECORD_PREFIX+drivingId);
  180. エントリ == null || エントリ.size ( ) == 0 の場合{
  181. HiLog.info(label, "レポートレコードは空です!" );
  182. 戻る ヌル;
  183. }それ以外{
  184. Gson を新しい Gson() に変換します。
  185. エントリ entry = entrys.get(0);
  186. 文字列 resultJson = entry.getValue().getString();
  187. リスト<ReportRecord> reportRecordLst = gson.fromJson(resultJson, 新しい TypeToken<List<ReportRecord>>() {}.getType());
  188. HiLog.info(label, "レポートレコードを正常に取得しました!" + reportRecordLst.size ());
  189.  
  190. reportRecordLst!= null && reportRecordLst.size () > 0場合{
  191. //選別
  192. レポートレコードコンパレーター reportRecordComparator = 新しいレポートレコードコンパレーター();
  193. reportRecordLst.sort(reportRecordComparator);
  194. }
  195. reportRecordLstを返します
  196. }
  197. }
  198. /**
  199. * データを同期する
  200. */
  201. パブリックボイドsyncData() {
  202. リスト<デバイス情報> deviceInfoList = kvManager.getConnectedDevicesInfo(DeviceFilterStrategy.NO_FILTER);
  203. リスト<String> deviceIdList = 新しいArrayList<>();
  204. 文字列デバイスID;
  205. (デバイス情報デバイス情報:デバイス情報リスト) {
  206. デバイスID = デバイス情報.getId();
  207. HiLog.info(ラベル、 "デバイスID = " + デバイスID);
  208. デバイスIDリスト。 (デバイスID)を追加します
  209. }
  210. HiLog.info(ラベル、 "deviceIdList.size() = " + deviceIdList.size ());
  211. ( deviceIdList.size () > 0)の場合{
  212. 単一のKvStore.sync(デバイスIDリスト、SyncMode.PUSH_ONLY);
  213. }それ以外{
  214. HiLog.error(label, "共有デバイスがありません" );
  215. }
  216. }
  217. /**
  218. * コールバックインターフェースを登録する
  219. * @param kvStoreObserver kvStore オブジェクト
  220. */
  221. パブリックvoid registerCallback(KvStoreObserver kvStoreObserver) {
  222. 単一の KvStore.subscribe(SubscribeType.SUBSCRIBE_TYPE_ALL、kvStoreObserver);
  223. }
  224. /**
  225. * データを消去
  226. */
  227. パブリックボイドクリアオールデータ() {
  228. リスト<Entry> エントリ = singleKvStore.getEntries( "" );
  229. エントリ!= null && エントリ.size ()>0){
  230. (エントリ entry:entrys){
  231. 単一のKvStoreを削除します(entry.getKey());
  232. }
  233. HiLog.info(label, "データが正常にクリアされました" );
  234. }それ以外{
  235. HiLog.info(label, "クリアするデータがありません" );
  236. }
  237. }
  238. /**
  239. * 既存の運転記録から運転IDを取得する
  240. * @return運転記録IDを返します
  241. */
  242. パブリック文字列 getDrivingId(){
  243. 文字列 drivingId = "" ;
  244. リスト<Entry> エントリ = singleKvStore.getEntries(Constant.DRIVING_REPORT_PREFIX);
  245. エントリがnullエントリがsize () > 0 の場合{
  246. リスト<DrivingRecord> drivingReporList = new ArrayList<>();
  247. (エントリ entry:entrys){
  248. 文字列値 = entry.getValue().getString();
  249. Gson を新しい Gson() に変換します。
  250. 運転記録 drivingRecord = gson.fromJson(値、 DrivingRecord.class);
  251. 文字列 dateStr = drivingRecord.getDrivingDate();
  252. StringUtils.isDiffHour(dateStr)の場合{
  253. 運転記録リストに運転記録を追加します。
  254. }
  255. HiLog.info(ラベル、運転記録.getId());
  256. 運転記録リストに運転記録を追加します。
  257. }
  258. 運転レポートリストのサイズ() > 0の場合{
  259. //選別
  260. DrivingReportComparator を新しい DrivingReportComparator() に追加します。
  261. 運転レポートリストをソートします(運転レポート比較);
  262.  
  263. 運転ID = 運転レポートリスト.get(0).getId();
  264. HiLog.info(label, "条件を満たす drivingId が見つかりました:" + drivingId);
  265. }それ以外{
  266. HiLog.info(label, "条件に一致する drivingId が見つかりませんでした" );
  267. }
  268. }それ以外{
  269. HiLog.info(label, "運転記録が空です。条件に一致する運転IDが見つかりませんでした" );
  270. }
  271.  
  272. drivingIdを返します
  273. }
  274. }

3. 運転記録コード

  1. com.isoftstone.smartcar.app.ResourceTable をインポートします。
  2. com.isoftstone.smartcar.app.model.DrivingRecord をインポートします。
  3. com.isoftstone.smartcar.app.provider.DrivingRecordProvider をインポートします。
  4. com.isoftstone.smartcar.app.service.SmartShareService をインポートします。
  5. ohos.aafwk.ability.AbilitySlice をインポートします。
  6. ohos.aafwk.content.Intent をインポートします。
  7. ohos.aafwk.content.Operation をインポートします。
  8. ohos.agp.components.Component をインポートします。
  9. ohos.agp.components.Image をインポートします。
  10. ohos.agp.components.ListContainer をインポートします。
  11. java.util.List をインポートします。
  12. /**
  13. * 運転記録
  14. */
  15. パブリッククラス DrivingRecordsAbilitySlice は AbilitySlice を拡張し、Component.ClickedListener を実装します {
  16. プライベート ListContainer lcRecords;
  17. プライベート SmartShareService shareService;
  18. プライベート List<DrivingRecord> drivingRecordList;
  19. プライベート DrivingRecordProvider drivingRecordProvider;
  20. @オーバーライド
  21. パブリックvoid onStart(インテント インテント) {
  22. super.onStart(インテント);
  23. super.setUIContent(ResourceTable.Layout_ability_driving_records);
  24. UI を初期化します。
  25. }
  26. プライベートvoidinitUI() {
  27. shareService = SmartShareService.getInstance(これ);
  28. shareService.init();
  29. 画像 iBack = (画像) findComponentById(ResourceTable.Id_i_back);
  30. iBack.setClickedListener(これを);
  31. lcRecords = (ListContainer) findComponentById(ResourceTable.Id_lc_records);
  32. 運転記録リスト = getData();
  33. drivingRecordProvider = 新しい DrivingRecordProvider(drivingRecordList、this);
  34. lcRecords.setItemProvider(ドライブレコードプロバイダー);
  35. lcRecords.setItemClickedListener(新しいListContainer.ItemClickedListener() {
  36. @オーバーライド
  37. パブリックvoid onItemClicked(ListContainer listContainer、コンポーネント コンポーネント、 int i、long l) {
  38. インテントのintent = 新しいIntent();
  39. 運転記録 drivingRecord = (DrivingRecord) drivingRecordProvider.getItem(i);
  40. 意図設定します
  41. intent.setParam( "lat" 、 drivingRecord.getLatitude());
  42. intent.setParam( "lng" 、 drivingRecord.getLongitude());
  43. 操作 operation = new Intent.OperationBuilder()
  44. .withDeviceId( "" )
  45. .withBundleName( "com.isoftstone.smartcar.app" )
  46. .withAbilityName( "com.isoftstone.smartcar.app.DrivingRecordsDetailAbility" )
  47. 。建てる();
  48. インテントをsetOperation(操作);
  49. 開始アビリティ(インテント);
  50. //終了();
  51. }
  52. });
  53. }
  54. @オーバーライド
  55. パブリックvoid onActive() {
  56. スーパーのonActive();
  57. 運転記録リスト = getData();
  58. drivingRecordProvider = 新しい DrivingRecordProvider(drivingRecordList、this);
  59. lcRecords.setItemProvider(ドライブレコードプロバイダー);
  60. }
  61. @オーバーライド
  62. パブリックvoid onForeground(インテント インテント) {
  63. super.onForeground(インテント);
  64. }
  65. @オーバーライド
  66. パブリックvoid onClick(コンポーネント コンポーネント) {
  67. (component.getId() == ResourceTable.Id_i_back) の場合 {
  68. 終了能力();
  69. }
  70. }
  71. プライベートリスト<DrivingRecord> getData() {
  72. shareService.getDrivingRecords()を返します
  73. }
  74. }

4. 運転記録詳細コード

  1. com.isoftstone.smartcar.app.ResourceTable をインポートします。
  2. com.isoftstone.smartcar.app.model.DrivingMap をインポートします。
  3. com.isoftstone.smartcar.app.model.ReportRecord をインポートします。
  4. com.isoftstone.smartcar.app.provider.ReportRecordProvider をインポートします。
  5. com.isoftstone.smartcar.app.service.SmartShareService をインポートします。
  6. com.isoftstone.smartcar.app.utils.CoordinateConverter をインポートします。
  7. com.isoftstone.smartcar.app.widget.carmap.LatLng をインポートします。
  8. com.isoftstone.smartcar.app.widget.carmap.TinyMap をインポートします。
  9. ohos.aafwk.ability.AbilitySlice をインポートします。
  10. ohos.aafwk.content.Intent をインポートします。
  11. ohos.agp.components.Component をインポートします。
  12. ohos.agp.components.Image をインポートします。
  13. ohos.agp.components.ListContainer をインポートします。
  14. ohos.agp.utils.Point をインポートします。
  15. ohos.hiviewdfx.HiLog をインポートします。
  16. ohos.hiviewdfx.HiLogLabel をインポートします。
  17. ohos.multimodalinput.event.KeyEvent をインポートします。
  18. java.util.ArrayList をインポートします。
  19. java.util.List をインポートします。
  20. java.util.Timer をインポートします。
  21. java.util.TimerTask をインポートします。
  22.  
  23. /**
  24. * 運転記録の詳細
  25. */
  26. パブリッククラス DrivingRecordsDetailAbilitySlice は AbilitySlice を拡張し、Component.ClickedListener を実装します {
  27. プライベート静的最終 HiLogLabel logLabel = new HiLogLabel(HiLog.LOG_APP, 0x00100, "DrivingRecordsDetailAbilitySlice" );
  28.  
  29. プライベートTinyMapマップ;
  30. プライベート文字列 drivingId;
  31. プライベート SmartShareService shareService;
  32.  
  33. @オーバーライド
  34. 保護されたvoid onStart(インテントインテント) {
  35. super.onStart(インテント);
  36. super.setUIContent(ResourceTable.Layout_ability_driving_records_detail);
  37. UIを初期化します(インテント);
  38. }
  39.  
  40. プライベートvoid initUI(インテントインテント) {
  41. 画像 iBack = (画像) findComponentById(ResourceTable.Id_i_back);
  42. iBack.setClickedListener(これを);
  43. マップ = (TinyMap) findComponentById(ResourceTable.Id_map);
  44. リストコンテナー reportListContainer = (リストコンテナー) findComponentById(ResourceTable.Id_report_records);
  45. 運転ID = intent.getStringParam( "運転ID" );
  46. shareService = SmartShareService.getInstance(これ);
  47. shareService.init();
  48.  
  49. 新しいタイマー()。スケジュール(新しいタイマータスク() {
  50. @オーバーライド
  51. パブリックボイド実行(){
  52. getUITaskDispatcher().asyncDispatch(新しいRunnable() {
  53. @オーバーライド
  54. パブリックボイド実行(){
  55. マップを設定します。
  56. }
  57. });
  58. }
  59. },500);
  60.  
  61. リスト<ReportRecords> reportRecords = shareService.getReportRecords(drivingId);
  62. レポート レコード プロバイダー reportRecordProvider = 新しいレポート レコード プロバイダー (reportRecords、this)。
  63. reportListContainer.setItemProvider(reportRecordProvider);
  64. }
  65.  
  66. @オーバーライド
  67. パブリックvoid onClick(コンポーネント コンポーネント) {
  68. (component.getId() == ResourceTable.Id_i_back) の場合、新しい DrivingRecordsAbilitySlice() と新しい Intent() が存在します。
  69. 終了();
  70. }
  71. }
  72.  
  73. @オーバーライド
  74. パブリックブールonKeyUp( intキーコード、キーイベントキーイベント) {
  75. HiLog.error(logLabel、keyEvent.getKeyCode()+ "" );
  76. (keyCode==KeyEvent.KEY_BACK)の場合{
  77. //present(新しい DrivingRecordsAbilitySlice()、新しい Intent());
  78. 終了();
  79. 戻る 真実;
  80. }
  81. super.onKeyDown(keyCode, keyEvent)を返します
  82. }
  83.  
  84. プライベート LatLng WGS84ToMercator(LatLng latLng) {
  85. CoordinateConverter.WGS84ToMercator(latLng.getLng(), latLng.getLat())を返します
  86. }
  87.  
  88. プライベートvoidsetMap() {
  89. マップを初期化します。
  90. リスト<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. リスト<LatLng> latLngs = 新しいArrayList<>();
  101. (DrivingMap drivingMap : drivingMaps)の場合{
  102. LatLng latLng = new LatLng( Double .parseDouble(drivingMap.getLatitude()), Double .parseDouble(drivingMap.getLongitude()));
  103. ポイント p = new Point(( float ) WGS84ToMercator(latLng).getLng(), ( float ) WGS84ToMercator(latLng).getLat());
  104. 緯度経度。 (新しいLatLng(p.getPointY(), p.getPointX()))を追加します
  105. }
  106. マップにパスを設定します。
  107. }
  108. }

詳細については、以下をご覧ください。

51CTOとHuaweiが共同で構築したHongmengテクノロジーコミュニティ

https://harmonyos..com

<<:  テンセントクラウドTDSQLは完全に自社開発した新しいアジャイルエンジンでデータベースのローカライズを促進

>>:  2022年に注目すべき6つのエッジコンピューティングのトレンド

推薦する

Googleによる不自然なリンクの特徴と対処について

Googleにおける不自然なリンクの特徴と扱いについて背景過去数か月間、Google は不自然なリン...

「インフルエンサーエコノミー」と「ホームエコノミー」が新たなボーナス期間となる

「家内経済」は最近ホットな言葉です。ニュースメディアで多く取り上げられているだけでなく、資本市場も反...

ガートナー: 2019 年のパブリック クラウド サービスの 6 つのトレンド

2017 年から 2018 年にかけて、クラウド サービス市場は大きな変化を遂げました。組織は、クラ...

クラウド ネイティブ アーキテクチャ: クラウドで回復力のあるアプリケーションを構築する

クラウド コンピューティング テクノロジーの急速な発展に伴い、クラウド ネイティブ アーキテクチャは...

カテゴリディレクトリへのログインはまだ機能しますか?

すべての検索エンジンは、リンクを最も重要なランキング要素の 1 つと見なします。簡単に言えば、Web...

カップル向けソーシャルネットワーク「Pair」がシード資金420万ドルを調達

新浪科技報、北京時間5月2日午後のニュースによると、米国のカップル向けソーシャルネットワーク「Pai...

母子ブランドマーケティングの3つの戦略

優れたケース分析事例名: [Keyoubi & babycare & Pigeon]...

5Gの導入によりIoTとエッジコンピューティングが増加

より多くの企業が、帯域幅を大量に消費するテクノロジーに自社のエッジをアップグレードする時期が来ていま...

クルンはどうですか?共有ポイントロサンゼルス サーバーの評価データは参考用です。

Kurun のコア リソースは、米国のロサンゼルス データ センターにあります。Kurun のロサン...

FlipperHost – 1536M RAM/OpenVZ/月額6.99ドル/テキサス/フロリダ/ロサンゼルス

FlipperHost は 2011 年に設立されました。小規模な VPS ビジネスです。優れたサー...

キーワードがウェブサイトの重みに与える影響についての簡単な説明

今日はせっかくの機会なので、重みとキーワードの重要な関係について私の考えをシェアしたいと思います。 ...

当時の「ユーザー」をめぐる私たちの関係

SEO 3.0 時代では、すべてのウェブマスターがユーザー エクスペリエンスの真の意味を理解している...

UEO時代では、ユーザーのニーズに合わせて最適化する必要がある

一連の主要な検索エンジンのアップデートにより、UEO という言葉はインターネット上で徐々に人気が高ま...