成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

HarmonyOS 項(xiàng)目實(shí)戰(zhàn)之通訊錄Demo(JS)

開發(fā) 前端 OpenHarmony
通訊錄demo主要分為聯(lián)系人界面、設(shè)置緊急聯(lián)系人、服務(wù)卡片3個(gè)模塊,分為Java和JS兩個(gè)版本,本篇主要講解用盡可能的用純JS去實(shí)現(xiàn),實(shí)在無法實(shí)現(xiàn)的地方采用JS與Java結(jié)合。

[[439628]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

1 簡介

通訊錄demo主要分為聯(lián)系人界面、設(shè)置緊急聯(lián)系人、服務(wù)卡片3個(gè)模塊,分為Java和JS兩個(gè)版本,本篇主要講解用盡可能的用純JS去實(shí)現(xiàn),實(shí)在無法實(shí)現(xiàn)的地方采用JS與Java結(jié)合。

1.1 原型

感興趣的小伙伴,可以自己根據(jù)原型效果自己嘗試著去實(shí)現(xiàn)【通訊錄demo簡易原型】。

#星光計(jì)劃2.0# HarmonyOS 項(xiàng)目實(shí)戰(zhàn)之通訊錄Demo(JS)-鴻蒙HarmonyOS技術(shù)社區(qū)#星光計(jì)劃2.0# HarmonyOS 項(xiàng)目實(shí)戰(zhàn)之通訊錄Demo(JS)-鴻蒙HarmonyOS技術(shù)社區(qū)#星光計(jì)劃2.0# HarmonyOS 項(xiàng)目實(shí)戰(zhàn)之通訊錄Demo(JS)-鴻蒙HarmonyOS技術(shù)社區(qū)

1.2 場景延伸

通過學(xué)習(xí)與練習(xí)本demo,可以延伸至以下場景。

#星光計(jì)劃2.0# HarmonyOS 項(xiàng)目實(shí)戰(zhàn)之通訊錄Demo(JS)-鴻蒙HarmonyOS技術(shù)社區(qū)#星光計(jì)劃2.0# HarmonyOS 項(xiàng)目實(shí)戰(zhàn)之通訊錄Demo(JS)-鴻蒙HarmonyOS技術(shù)社區(qū)#星光計(jì)劃2.0# HarmonyOS 項(xiàng)目實(shí)戰(zhàn)之通訊錄Demo(JS)-鴻蒙HarmonyOS技術(shù)社區(qū)

2 功能開發(fā)

2.1 聯(lián)系人列表

2.1.1 實(shí)現(xiàn)效果

#星光計(jì)劃2.0# HarmonyOS 項(xiàng)目實(shí)戰(zhàn)之通訊錄Demo(JS)-鴻蒙HarmonyOS技術(shù)社區(qū)

2.1.2 核心代碼

參考:基于JS擴(kuò)展的類Web開發(fā)范式-組件-容器組件-list

關(guān)鍵屬性 indexer=“true”

  1. <!-- list --> 
  2.     <list id="address_list" class="list-wrapper" indexer="true" indexerbubble="true" shapemode="rect" 
  3.           initialindex="0"
  4.         <block for="{{ list_data }}"
  5.             <list-item section="{{ $item.item_section }}" class="todo-item"
  6.                 <div class="item-wrapper" @click="onItemClick($item)" @longpress="onItemLongPress($item)"
  7.                     <image class="item-icon" src="{{ $item.item_icon }}"></image> 
  8.                     <text class="item-name">{{ $item.item_name }}</text> 
  9.                 </div> 
  10.             </list-item> 
  11.         </block> 
  12.     </list> 

2.2 三方跳轉(zhuǎn)

2.2.1 實(shí)現(xiàn)效果

#星光計(jì)劃2.0# HarmonyOS 項(xiàng)目實(shí)戰(zhàn)之通訊錄Demo(JS)-鴻蒙HarmonyOS技術(shù)社區(qū)

2.2.2 js和java通信

js打開三方應(yīng)用目前還不知道如何操作,我們通過js調(diào)java方法來實(shí)現(xiàn)跳轉(zhuǎn)。

JS LocalParticleAbility機(jī)制請(qǐng)看官方鏈接:API 6開始支持

參考:JS LocalParticleAbility機(jī)制-概述

通過js 獲取到j(luò)ava接口

  1. export default { 
  2.     data: { 
  3.        javaInterface: {} 
  4.     }, 
  5.  
  6.     onInit() { 
  7.         console.log(TAG + " ;onInit())"); 
  8.     }, 
  9.  
  10.     onShow() { 
  11.         console.log(TAG + " ;onShow())"); 
  12.         // onInit生命周期中Java接口對(duì)象還未創(chuàng)建完成,請(qǐng)勿在onInit中調(diào)用。 
  13.         this.javaInterface = createLocalParticleAbility('com.pvj.addresslistdemo.MyLocalParticleAbility'); 
  14.     } 
  15.      
  16.     onClickPhone() { 
  17.     this.javaInterface.doDial(this.item_phone) 
  18.     }, 
  19.     onClickMail() { 
  20.     this.javaInterface.doMessage(this.item_phone) 
  21.     } 

java實(shí)現(xiàn)

  1. public class MyLocalParticleAbility implements LocalParticleAbility { 
  2.     private static MyLocalParticleAbility instance; 
  3.     Context applicationContext; 
  4.     Context context; 
  5.  
  6.     private MyLocalParticleAbility(Context context) { 
  7.         this.context = context; 
  8.         this.applicationContext = context.getApplicationContext(); 
  9.     } 
  10.  
  11.     public static MyLocalParticleAbility getInstance(Context applicationContext) { 
  12.         if (instance == null) { 
  13.             instance = new MyLocalParticleAbility(applicationContext); 
  14.  
  15.         } 
  16.         return instance; 
  17.     } 
  18.  
  19.     /** 
  20.      * 跳轉(zhuǎn)系統(tǒng)撥打電話界面 
  21.      */ 
  22.     public void doDial(String destinationNum) { 
  23.       ... 
  24.     } 
  25.  
  26.     public void doMessage(String telephone) { 
  27.       .... 
  28.     } 
  29.  

LocalParticleAbility 需要 register與 deregister

  1. public class MainAbility extends AceAbility { 
  2.     @Override 
  3.     public void onStart(Intent intent) { 
  4.         super.onStart(intent); 
  5.         .... 
  6.         MyLocalParticleAbility.getInstance(getContext()).register(this); 
  7.     } 
  8.  
  9.     @Override 
  10.     public void onStop() { 
  11.         super.onStop(); 
  12.         MyLocalParticleAbility.getInstance(getContext()).deregister(this); 
  13.     } 
  14.  } 

 2.2.3 撥打電話與發(fā)送短信

  1. /** 
  2.  * 跳轉(zhuǎn)系統(tǒng)撥打電話界面 
  3.  */ 
  4. public void doDial(String destinationNum) { 
  5.     Intent intent = new Intent(); 
  6.     Operation operation = new Intent.OperationBuilder() 
  7.         .withAction(IntentConstants.ACTION_DIAL) // 系統(tǒng)應(yīng)用撥號(hào)盤 
  8.         .withUri(Uri.parse("tel:" + destinationNum)) // 設(shè)置號(hào)碼 
  9.         .withFlags(2) 
  10.         .build(); 
  11.     intent.setOperation(operation); 
  12.     // 啟動(dòng)Ability 
  13.     context.startAbility(intent, 10); 
  14.  
  15. //發(fā)送短信 
  16. public void doMessage(String telephone) { 
  17.     Intent intent = new Intent(); 
  18.     Operation operation = new Intent.OperationBuilder() 
  19.         .withAction(IntentConstants.ACTION_SEND_SMS) 
  20.         .withUri(Uri.parse("smsto:" + telephone)) // 設(shè)置號(hào)碼 
  21.         .withFlags(Intent.FLAG_NOT_OHOS_COMPONENT) 
  22.         .build(); 
  23.     intent.setOperation(operation); 
  24.     context.startAbility(intent, 11); 

2.3 緊急聯(lián)系人

2.3.1 實(shí)現(xiàn)效果

#星光計(jì)劃2.0# HarmonyOS 項(xiàng)目實(shí)戰(zhàn)之通訊錄Demo(JS)-鴻蒙HarmonyOS技術(shù)社區(qū)

2.3.2 js數(shù)據(jù)存儲(chǔ)

js關(guān)系型數(shù)據(jù)庫: 優(yōu)先用關(guān)系型數(shù)據(jù)庫,發(fā)現(xiàn) JS從API Version 7開始支持。

js輕量級(jí)存儲(chǔ):

① 它是key-value的存儲(chǔ)的方法,從 API Version 6 開始支持;

參考:數(shù)據(jù)管理-輕量級(jí)存儲(chǔ)

② 麻煩的是:每次存數(shù)據(jù)前,需要取一次,再新增數(shù)據(jù);

在實(shí)現(xiàn)服務(wù)卡片更新信息時(shí),需要?jiǎng)討B(tài)的更新數(shù)據(jù),而java的輕量級(jí)存儲(chǔ)與JS存儲(chǔ)的不是同一目錄,目錄改成一致程序出錯(cuò),最終只能采用js與java通信,由java側(cè)統(tǒng)一完成數(shù)據(jù)新增與插入。

2.3.3 java數(shù)據(jù)存儲(chǔ)實(shí)現(xiàn)

java代碼:

  1. public class MyLocalParticleAbility implements LocalParticleAbility { 
  2.     private static MyLocalParticleAbility instance; 
  3.     private static final HiLogLabel TAG = new HiLogLabel(HiLog.DEBUG, 0x0, MyLocalParticleAbility.class.getName()); 
  4.     Preferences preferences; 
  5.     public static final String KEY = "key_list"
  6.     Context applicationContext; 
  7.     Context context; 
  8.  
  9.     private MyLocalParticleAbility(Context context) { 
  10.         this.context = context; 
  11.         this.applicationContext = context.getApplicationContext(); 
  12.  
  13.         DatabaseHelper databaseHelper = new DatabaseHelper(applicationContext); 
  14.         String fileName = "main_list.xml";  
  15.         // fileName表示文件名,其取值不能為空,也不能包含路徑,默認(rèn)存儲(chǔ)目錄可以通過context.getPreferencesDir()獲取。 
  16.         preferences = databaseHelper.getPreferences(fileName); 
  17.     } 
  18.  
  19.  
  20.     public static MyLocalParticleAbility getInstance(Context applicationContext) { 
  21.         if (instance == null) { 
  22.             instance = new MyLocalParticleAbility(applicationContext); 
  23.  
  24.         } 
  25.         return instance; 
  26.     } 
  27.  
  28.  
  29.     public String getContactPersonList() { 
  30.         // context入?yún)㈩愋蜑閛hos.app.Context。 
  31.         String preferencesString = preferences.getString(KEY""); 
  32.         HiLog.info(TAG, "getContactPersonList preferencesString : " + preferencesString); 
  33.         return preferencesString; 
  34.     } 
  35.  
  36.  
  37.     public void addContactPersonList(String content) { 
  38.         HiLog.info(TAG, "addContactPersonList content : " + content); 
  39.         preferences.putString(KEY, content); 
  40.         preferences.flushSync(); 
  41.     } 

js代碼:

  1. import prompt from '@system.prompt'
  2.  
  3.  onItemLongPress(item) { 
  4.         console.log(TAG + " ;onItemLongPress:" + item.item_name); 
  5.         let THIS = this; 
  6.         //點(diǎn)擊刪除時(shí)彈出對(duì)話框 
  7.         prompt.showDialog({ 
  8.             title: "操作提示"
  9.             message: "添加" + item.item_name + "為緊急聯(lián)系人嗎?"
  10.             buttons: [{ 
  11.                           "text""確定"
  12.                           "color""" 
  13.                       }, 
  14.                       { 
  15.                           "text""取消"
  16.                           "color""" 
  17.                       }], 
  18.             success: function (data) { 
  19.                 if (data.index == 0) { 
  20.                     THIS.addContactPersonList(item); 
  21.                 }  
  22.             } 
  23.         }); 
  24.     } 
  25.  
  26.   async addContactPersonList(item) { 
  27.         let content =  await this.getContactPersonList(); 
  28.         console.info(TAG + "addContactPersonList content: " + content); 
  29.  
  30.         let list = [] 
  31.         if(content != ""){ 
  32.             list = JSON.parse(content); 
  33.         } 
  34.         list.push(item); 
  35.         let temp = JSON.stringify(list); 
  36.         console.info(TAG + "addContactPersonList temp: " + temp); 
  37.  
  38.         this.javaInterface.addContactPersonList(temp).then(); 
  39.         return true 
  40.         // store.putSync(keytemp); 
  41.     }, 
  42.    async getContactPersonList() { 
  43.         let ret = await this.javaInterface.getContactPersonList() 
  44.         console.info(TAG + "getContactPersonList ret:" + ret); 
  45.         return ret 
  46.     } 

2.4 js服務(wù)卡片

2.4.1 實(shí)現(xiàn)效果

2.4.2 創(chuàng)建卡片模板

2.4.3 卡片數(shù)據(jù)綁定

  1. public ProviderFormInfo bindFormData(long formId) { 
  2.     HiLog.info(TAG, "bind form data"); 
  3.     ZSONObject zsonObject = new ZSONObject(); 
  4.     String contactPersonList = MyLocalParticleAbility.getInstance(context.getApplicationContext()).getContactPersonList(); 
  5.     JSONArray jsonArray = JSON.parseArray(contactPersonList); 
  6.     for (int i = 0; i < jsonArray.size(); i++) { 
  7.         String name = jsonArray.getJSONObject(i).getString("item_name"); 
  8.         String phone = jsonArray.getJSONObject(i).getString("item_phone"); 
  9.         if (i == 0) { 
  10.             zsonObject.put("titleText"name); 
  11.             zsonObject.put("contentText", phone); 
  12.         } else if (i == 1) { 
  13.             zsonObject.put("titleText1"name);  
  14.             zsonObject.put("contentText1", phone); //傳遞的是string;是否支持其他類型?比如數(shù)組 
  15.         } else { 
  16.             break; 
  17.         } 
  18.         HiLog.info(TAG, "bind form data :" + jsonArray.getJSONObject(i).get("item_name")); 
  19.         HiLog.info(TAG, "bind form data :" + jsonArray.getJSONObject(i).get("item_phone")); 
  20.     } 
  21.  
  22.     ProviderFormInfo providerFormInfo = new ProviderFormInfo(); 
  23.     providerFormInfo.setJsBindingData(new FormBindingData(zsonObject)); 
  24.  
  25.     return providerFormInfo; 

2.4.4 事件處理

  1.   "data": { 
  2.     "appName""緊急聯(lián)系人"
  3.     "contactPersonList"""
  4.     "titleText""Title"
  5.     "contentText""Introduction"
  6.     "titleText1"""
  7.     "contentText1"""
  8.     "actionName1""Action 1"
  9.     "actionName2""Action 2" 
  10.   }, 
  11.   "actions": { 
  12.     "routerEvent": { 
  13.       "action""router"
  14.       "abilityName""com.pvj.addresslistdemo.MainAbility"
  15.       "params": { 
  16.         "message""weather" 
  17.       } 
  18.     }, 
  19.     "callEvent1": { 
  20.       "action""message"
  21.       "params": { 
  22.         "mAction""callEvent1" 
  23.       } 
  24.     }, 
  25.     "callEvent2": { 
  26.       "action""message"
  27.       "params": { 
  28.         "mAction""callEvent2" //  
  29.       } 
  30.     } 
  31.   } 

call 就是前面的播打電話的方法

  1. @Override 
  2. public void onTriggerFormEvent(long formId, String message) { 
  3.     HiLog.info(TAG, "handle card click event." + message); 
  4.  
  5.     ZSONObject zsonObject = ZSONObject.stringToZSON(message); 
  6.  
  7.     // Do something here after receive the message from js card 
  8.     ZSONObject result = new ZSONObject(); 
  9.     switch (zsonObject.getString("mAction")) { 
  10.         case "callEvent1"
  11.             call(0); 
  12.             break; 
  13.         case "callEvent2"
  14.             call(1); 
  15.             break; 
  16.     } 

3 注意事項(xiàng)

Demo還有很多需要完善的地方

刪除時(shí),索引不會(huì)被刪除;

索引想要自定義樣式,目前實(shí)現(xiàn)不了;

運(yùn)行在api為7的手機(jī)的bug,一開始莫名的#顯示;

純js實(shí)現(xiàn)一個(gè)應(yīng)用,目前還是行不通;

js官方文檔上,有些不是很完善和穩(wěn)定,對(duì)入門選手極其不友好。

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2022-01-04 15:34:31

鴻蒙HarmonyOS應(yīng)用

2011-09-05 14:08:21

微信Andriod安卓

2014-09-24 10:29:14

微信企業(yè)號(hào)開發(fā)

2011-09-16 14:05:42

Andrioid應(yīng)用iPhone應(yīng)用Symbian應(yīng)用

2014-09-28 22:30:13

微信企業(yè)號(hào)

2012-02-09 09:10:44

Path通訊錄隱私

2014-09-28 22:26:11

微信企業(yè)號(hào)

2010-06-18 22:42:42

智能手機(jī)平臺(tái)Android網(wǎng)秦

2013-03-18 10:19:27

安卓軟件手機(jī)通訊錄隱私信息

2012-06-05 13:53:03

天天聯(lián)系華為

2011-07-20 08:49:24

jQuery MobiAndroid

2010-09-26 08:35:01

火種通訊錄

2010-09-08 23:11:01

2012-12-21 14:51:52

手機(jī)中國

2010-05-12 14:42:20

2015-07-30 15:58:15

EC企信企業(yè)即時(shí)通訊

2011-08-12 10:16:10

iPhone通訊錄聯(lián)系人

2011-11-28 14:37:32

點(diǎn)心通訊錄

2012-01-09 16:43:13

點(diǎn)心通訊錄

2011-07-19 17:25:14

jQuery MobiAndroid
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 涩涩操 | 99欧美精品 | 91久久 | 91九色porny首页最多播放 | 天堂综合| 成人精品视频在线观看 | www.蜜桃av| 日本精品裸体写真集在线观看 | 亚洲综合色视频在线观看 | 精品国产乱码一区二区三区a | 91精品久久久久久久久久小网站 | 日韩高清三区 | 免费一级毛片 | 久久久久久久久久久国产 | 日本一区二区在线视频 | 日日夜夜视频 | 懂色中文一区二区三区在线视频 | 国产在线中文字幕 | 少妇久久久久 | 亚洲精品国产电影 | 国产91久久久久蜜臀青青天草二 | 亚洲一区二区三区四区五区中文 | 亚洲一区二区中文字幕 | 中文字幕在线视频网站 | 亚洲成人综合在线 | 99国产精品99久久久久久 | 99久久日韩精品免费热麻豆美女 | 国产成人免费 | 久干网| 国产精品爱久久久久久久 | 日韩一区二区福利视频 | 欧美一区视频在线 | 黄色av免费| 国产免费一区 | 欧美电影免费观看高清 | 毛片免费在线观看 | 欧洲视频一区二区 | 亚洲精品www久久久久久广东 | 亚洲日韩欧美一区二区在线 | 欧美成人a∨高清免费观看 欧美日韩中 | 蜜桃精品视频在线 |