当前位置: 首页 > 科技观察

HarmonyOS项目实战通讯录Demo(JS)_0

时间:2023-03-17 19:30:52 科技观察

更多内容请访问:Harmonyos技术社区https://harmonyos.51cto.com1简介通讯录Demo主要分为通讯录三个模块:界面,设置紧急通讯录、服务名片,分为Java和JS两个版本。本文主要讲解如何尽可能使用纯JS来实现。实在不行的地方,就用JS和Java的结合。1.1对原型感兴趣的朋友可以根据原型效果尝试实现【联系人演示简单原型】。1.2场景扩展通过学习和练习本demo,可以扩展到以下场景。2功能开发2.1联系人列表2.1.1实现效果2.1.2核心代码参考:基于JS的类Web开发范式extension-component-containercomponent-listkeyattributeindexer="true"{{$item.item_name}}

2.2三方跳转2.2.1实现效果2.2.2js与java通信js打开三方应用还不知道怎么操作,我们用js来调整实现跳转的java方法。JSLocalParticleAbility机制请参考官方链接:API6开始支持参考:JSLocalParticleAbility机制-概述获取java接口exportdefault{data:{javaInterface:{}},onInit(){console.log(TAG+";onInit())throughjs)");},onShow(){console.log(TAG+";onShow())");//在onInit的生命周期中还没有创建Java接口对象,请勿调用它在onInit中。this.javaInterface=createLocalParticleAbility('com.pvj.addresslistdemo.MyLocalParticleAbility');}onClickPhone(){this.javaInterface.doDial(this.item_phone)},onClickMail(){this.javaInterface.doMessage(this.item_phone)}}java实现publicclassMyLocalParticleAbilityimplementsLocalParticleAbility{privatestaticMyLocalParticleAbilityinstance;ContextapplicationContext;Contextcontext;privateMyLocalParticleAbility(Contextcontext){this.context=context;this.applicationContext=context.getApplicationContext();}publicstaticMyLocalParticleAbilitygetInstance(ContextapplicationContext){if(instanceLocaplication==null){instanceAbility=new);}returninstance;}/***跳转系统拨号界面*/publicvoiddoDial(StringdestinationNum){...}publicvoiddoMessage(Stringtelephone){....}}LocalParticleAbility需要注册与取消注册publicclassMainAbilityextendsAceAbility{@OverridepublicvoidonStart(Intentintent){super.onStart(intent);....MyLocalParticleAbility.getInstance(getContext()).register(this);}@OverridepublicvoidonStop(){super.onStop();MyLocalParticleAbility.getInstance(getContext()).deregister(this);}}调用接口*/publicvoiddoDial(StringdestinationNum){Intentintent=newIntent();Operationoperation=newIntent.OperationBuilder().withAction(IntentConstants.ACTION_DIAL)//系统应用dial.withUri(Uri.parse("tel:"+destinationNum))//设置号码.withFlags(2).build();intent.setOperation(operation);//启动能力context.startAbility(intent,10);}//发送短信pu??blicvoiddoMessage(Stringtelephone){Intentintent=newIntent();Operationoperation=newIntent.OperationBuilder().withAction(IntentConstants.ACTION_SEND_SMS).withUri(Uri.parse("smsto:"+telephone))//设置号码.withFlags(Intent.FLAG_NOT_OHOS_COMPONENT).build();intent.setOperation(operation);context.startAbility(intent,11);}2.3紧急联系人2.3.1成就2.3.2js数据存储js关系型数据库:首选关系型数据库,发现从APIVersion7开始支持JSjs轻量级存储:①是key-value存储方式,从APIVersion6开始支持;参考:数据管理-轻量级存储②麻烦的是:每次保存数据前,都需要取一次,重新添加数据;服务卡更新信息时,需要动态更新数据,java的轻量级存储和JS存储不在同一个目录。数据的添加和插入统一在一端完成。2.3.3java数据存储实现java代码:publicclassMyLocalParticleAbilityimplementsLocalParticleAbility{privatestaticMyLocalParticleAbilityinstance;privatestaticfinalHiLogLabelTAG=newHiLogLabel(HiLog.DEBUG,0x0,MyLocalParticleAbility.class.getName());Preferencespreferences;publicstaticfinalStringKEY="key_list";ContextapplicationContext;Contextcontext;privateMyLocalParticleAbility(Contextcontext){this.context=context;this.applicationContext=context.getApplicationContext();DatabaseHelperdatabaseHelper=newDatabaseHelper(applicationContext);StringfileName="main_list.xml";//fileName表示文件名,其值不能为空或包含路径,默认存储目录可以通过context.getPreferencesDir()获取。preferences=databaseHelper.getPreferences(fileName);}publicstaticMyLocalParticleAbilitygetInstance(ContextapplicationContext){if(instance==null){instance=newMyLocalParticleAbility(applicationContext);}returninstance;}publicStringgetContactPersonList(){//context类型为ohos.app.Context。StringpreferencesString=preferences.getString(KEY,"");HiLog.info(TAG,"getContactPersonListpreferencesString:"+preferencesString);returnpreferencesString;}publicvoidaddContactPersonList(Stringcontent){HiLog.info(TAG,"addContactPersonListcontent:"+content);优先。putString(KEY,content);preferences.flushSync();}}js代码:importpromptfrom'@system.prompt';onItemLongPress(item){console.log(TAG+";onItemLongPress:"+item.item_name);letTHIS=this;//点击删除时弹出对话框prompt.showDialog({title:"操作提示",message:"添加"+item.item_name+"作为紧急联系人?",buttons:[{"text":"OK","color":""},{"text":"Cancel","color":""}],成功:函数(数据){if(data.index==0){THIS.addContactPersonList(item);}}});}asyncaddContactPersonList(item){letcontent=awaitthis.getContactPersonList();console.info(TAG+"addContactPersonListcontent:"+content);letlist=[]if(content!=""){list=JSON.parse(content);}list.push(item);lettemp=JSON.stringify(list);console.info(TAG+"addContactPersonListtemp:"+temp);this.javaInterface.addContactPersonList(temp).then();returntrue//store.putSync(key,temp);},asyncgetContactPersonList(){letret=awaitthis.javaInterface.getContactPersonList()console.info(TAG+"getContactPersonListret:"+ret);returnret}2.4js服务卡2.4.1实际效果2.4.2创建卡模板2.4.3卡数据绑定publicProviderFormInfobindFormData(longformId){HiLog.info(TAG,"bindONformObjectSON");;StringcontactPersonList=MyLocalParticleAbility.getInstance(context.getApplicationContext()).getContactPersonList();JSONArrayjsonArray=JSON.parseArray(contactPersonList);for(inti=0;i
猜你喜欢