鴻蒙系統(tǒng)應(yīng)用開發(fā)項(xiàng)目化教程 課件 項(xiàng)目4 開發(fā)分布式相冊_第1頁
鴻蒙系統(tǒng)應(yīng)用開發(fā)項(xiàng)目化教程 課件 項(xiàng)目4 開發(fā)分布式相冊_第2頁
鴻蒙系統(tǒng)應(yīng)用開發(fā)項(xiàng)目化教程 課件 項(xiàng)目4 開發(fā)分布式相冊_第3頁
鴻蒙系統(tǒng)應(yīng)用開發(fā)項(xiàng)目化教程 課件 項(xiàng)目4 開發(fā)分布式相冊_第4頁
鴻蒙系統(tǒng)應(yīng)用開發(fā)項(xiàng)目化教程 課件 項(xiàng)目4 開發(fā)分布式相冊_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

長沙民政職業(yè)技術(shù)學(xué)院鴻蒙應(yīng)用開發(fā)項(xiàng)目四開發(fā)相冊本項(xiàng)目為手機(jī)用戶開發(fā)一個相冊,這個相冊即要有一般手機(jī)都有的基本相冊功能,又要有基于分布式能力的照片共享功能。CONTENTS目錄任務(wù)一完成主界面UI設(shè)計和媒體訪問權(quán)限的申請1任務(wù)二

讀取并展示媒體庫的圖片2掌握鴻蒙系統(tǒng)權(quán)限申請方法;掌握系統(tǒng)多媒體數(shù)據(jù)訪問方法;掌握彈性布局的使用;掌握常用組件的使用;掌握頁面狀態(tài)管理和渲染控制技術(shù)知識目標(biāo)能進(jìn)行項(xiàng)目的需求分析和功能設(shè)計;能使用各種布局、組件、系統(tǒng)能力開發(fā)復(fù)雜應(yīng)用;能力目標(biāo)培養(yǎng)項(xiàng)目分析與設(shè)計能力;培養(yǎng)運(yùn)用多種技術(shù)解決復(fù)雜問題的能力。素養(yǎng)目標(biāo)教學(xué)目標(biāo)場景描述主界面在主界面中以標(biāo)簽頁的形式提供“照片”、“相冊”兩大功能,默認(rèn)顯示“照片”標(biāo)簽頁。如果有照片,顯示如圖(a)的界面,如果沒有照片,顯示如圖4-1(b)所示的界面。系統(tǒng)中沒有照片時:如果沒有照片,顯示如圖(b)所示的界面應(yīng)用啟動時:“照片”標(biāo)簽頁從手機(jī)存儲中獲取所有圖片,將這些圖片按日期組織在一起,以日期倒序方式將這些圖片的縮略圖顯示在列表中,每日的圖片水平方向顯示,一行顯示不下?lián)Q行顯示,如圖(a)。本項(xiàng)目為手機(jī)用戶開發(fā)一個簡易相冊。利用鴻蒙OS提供的媒體訪問能力查詢手機(jī)中的相冊和圖片信息,并利用強(qiáng)大的UI組件展示這些數(shù)據(jù)。場景描述顯示圖片明細(xì)從“照片”或“相冊”的圖片列表中點(diǎn)擊任何一張縮略圖時,調(diào)用“顯示原圖”界面將原圖顯示出來

本項(xiàng)目為手機(jī)用戶開發(fā)一個簡易相冊。利用鴻蒙OS提供的媒體訪問能力查詢手機(jī)中的相冊和圖片信息,并利用強(qiáng)大的UI組件展示這些數(shù)據(jù)。場景描述相冊標(biāo)簽頁“相冊”標(biāo)簽頁從手機(jī)中獲取所有相冊信息,以相冊封面圖標(biāo)顯示在下方列表中相冊中的照片列表:將相冊中的所有圖片的縮略圖以日期倒序方式顯示在列表中。當(dāng)點(diǎn)擊相冊中任何一張圖片時,顯示如前面所示的圖片原圖。點(diǎn)擊相冊標(biāo)簽時:顯示“照片”標(biāo)簽頁,如圖(a)。點(diǎn)擊相冊圖標(biāo),顯示相冊中的所有照片,如圖(b)。本項(xiàng)目為手機(jī)用戶開發(fā)一個簡易相冊。利用鴻蒙OS提供的媒體訪問能力查詢手機(jī)中的相冊和圖片信息,并利用強(qiáng)大的UI組件展示這些數(shù)據(jù)。任務(wù)1完成主界面UI設(shè)計和媒體訪問權(quán)限的申請01任務(wù)目標(biāo)及重點(diǎn)難點(diǎn)任務(wù)描述1、完成項(xiàng)目的創(chuàng)建;2、編寫主界面布局代碼;3、實(shí)現(xiàn)對媒體訪問權(quán)限的申請。任務(wù)目的1、知識目標(biāo):(1)掌握Tabs組件的使用;(2)掌握動態(tài)構(gòu)建UI元素的方法;(3)掌握鴻蒙系統(tǒng)權(quán)限申請方法;(4)掌握狀態(tài)管理和條件渲染的運(yùn)用2、能力目標(biāo):(1)能使用布局、組件、系統(tǒng)權(quán)限的申請等技術(shù)開發(fā)復(fù)雜應(yīng)用;(2)培養(yǎng)項(xiàng)目分析與設(shè)計能力;(3)培養(yǎng)運(yùn)用多種技術(shù)解決復(fù)雜問題的能力。3、素質(zhì)目標(biāo):(1)培養(yǎng)良好的編程習(xí)慣重難點(diǎn)1、重點(diǎn):(1)Tabs組件的使用(2)動態(tài)構(gòu)建UI元素(3)狀態(tài)管理和條件渲染(4)系統(tǒng)權(quán)限的申請2、難點(diǎn):(1)Tabs組件的使用(2)系統(tǒng)權(quán)限的申請02010304Tabs組件實(shí)現(xiàn)標(biāo)簽頁效果的組件狀態(tài)管理AskUI的實(shí)現(xiàn)界面動態(tài)渲染的機(jī)制渲染控制根據(jù)不同的條件做出不同的界面渲染效果權(quán)限申請某些情況下,應(yīng)用需要訪問額外的系統(tǒng)或其他應(yīng)用的數(shù)據(jù)或功能,系統(tǒng)或應(yīng)用也必須以明確的方式對外提供接口來共享其數(shù)據(jù)或功能。完成任務(wù)所需知識清單01完成任務(wù)所需知識清單一個Tabs組件是一個標(biāo)簽頁容器組件,通過標(biāo)簽進(jìn)行內(nèi)容視圖切換來實(shí)現(xiàn)多頁內(nèi)容展示,每個標(biāo)簽頁對應(yīng)一個內(nèi)容視圖。每個內(nèi)容視圖是一個TabContent子組件。Tabs組件的接口定義如下:Tabs(value?:{barPosition?:BarPosition,index?:number,controller?:TabsController})Tabs組件實(shí)現(xiàn)標(biāo)簽頁效果的組件Tabs接口參數(shù)說明表參數(shù)名參數(shù)類型必填參數(shù)描述barPositionBarPosition否設(shè)置Tabs的標(biāo)簽位置。默認(rèn)值:BarPosition.Startindexnumber否設(shè)置初始標(biāo)簽索引。默認(rèn)值:0controller否設(shè)置Tabs控制器。用于控制Tabs組件進(jìn)行標(biāo)簽切換。不支持一個TabsController控制多個Tabs組件。01完成任務(wù)所需知識清單Tabs組件實(shí)現(xiàn)標(biāo)簽頁效果的組件

Tabs的屬性說明:Tabs組件除支持組件的通用屬性外,還支持如下表的屬性:名稱參數(shù)類型描述verticalboolean設(shè)置為false是為橫向Tabs,設(shè)置為true時為縱向Tabs。默認(rèn)值:falsescrollableboolean設(shè)置為true時可以通過滑動頁面進(jìn)行頁面切換,為false時不可滑動切換頁面。默認(rèn)值:truebarModeBarModeTabBar布局模式,具體描述見BarMode枚舉說明。默認(rèn)值:BarMode.FixedbarWidthnumber|Length8+TabBar的寬度值。barHeightnumber|Length8+TabBar的高度值。animationDurationnumberTabContent滑動動畫時長。不設(shè)置時,點(diǎn)擊切換頁簽無動畫,滑動切換有動畫;設(shè)置時,點(diǎn)擊切換和滑動切換都有動畫。默認(rèn)值:20001完成任務(wù)所需知識清單Tabs組件實(shí)現(xiàn)標(biāo)簽頁效果的組件

示例:實(shí)現(xiàn)一個如圖的標(biāo)簽頁界面。02完成任務(wù)所需知識清單

狀態(tài)管理AskUI的實(shí)現(xiàn)界面動態(tài)渲染的機(jī)制ArkTS提供了多維度的狀態(tài)管理機(jī)制,在ArkUI開發(fā)框架中,和UI相關(guān)聯(lián)的數(shù)據(jù),不僅可以在組件內(nèi)使用,還可以在不同組件層級間傳遞,比如父子組件之間、爺孫組件之間,也可以是應(yīng)用全局范圍內(nèi)的傳遞。另外,從數(shù)據(jù)的傳遞形式來看,可分為只讀的單向傳遞和可變更的雙向傳遞。開發(fā)者可以靈活地利用這些能力來實(shí)現(xiàn)數(shù)據(jù)和UI的聯(lián)動。ArkTS定義了多個修飾器實(shí)現(xiàn)頁面級變量的狀態(tài)管理,具體下表:裝飾器裝飾內(nèi)容說明@State基本數(shù)據(jù)類型,類,數(shù)組修飾的狀態(tài)數(shù)據(jù)被修改時會執(zhí)行自定義組件build方法中的部分UI描述(使用該狀態(tài)變量的UI組件)來進(jìn)行UI界面更新。@Prop基本數(shù)據(jù)類型,類,數(shù)組修改后的狀態(tài)數(shù)據(jù)用于在父組件和子組件之間建立單向數(shù)據(jù)依賴關(guān)系。修改父組件關(guān)聯(lián)數(shù)據(jù)時,當(dāng)前組件會重新渲染。@Link基本數(shù)據(jù)類型,類,數(shù)組父子組件之間的雙向數(shù)據(jù)綁定,父組件的內(nèi)部狀態(tài)數(shù)據(jù)作為數(shù)據(jù)源,任何一方所做的修改都會反映給另一方。@Observed類@Observed應(yīng)用于類,表示該類中的數(shù)據(jù)變更被UI頁面管理。@ObjectLink被@Observed所裝飾類的對象@ObjectLink裝飾的狀態(tài)數(shù)據(jù)被修改時,在父組件或者其他兄弟組件內(nèi)與它關(guān)聯(lián)的狀態(tài)數(shù)據(jù)所在的組件都會重新渲染。@Provide基本數(shù)據(jù)類型,類,數(shù)組@Provide作為數(shù)據(jù)的提供方,可以更新其子孫節(jié)點(diǎn)的數(shù)據(jù),并觸發(fā)頁面重新渲染。@Consume基本數(shù)據(jù)類型,類,數(shù)組@Consume裝飾的變量在感知到@Provide裝飾的變量更新后,會觸發(fā)當(dāng)前自定義組件的重新渲染。02完成任務(wù)所需知識清單

狀態(tài)管理AskUI的實(shí)現(xiàn)界面動態(tài)渲染的機(jī)制應(yīng)用級變量的狀態(tài)管理使用AppStorage實(shí)現(xiàn)。AppStorage是整個應(yīng)用程序狀態(tài)的中心“數(shù)據(jù)庫”,UI框架會針對應(yīng)用程序創(chuàng)建單例AppStorage對象,并提供相應(yīng)的裝飾器和接口供應(yīng)用程序使用。@StorageLink:@StorageLink(name)的原理類似于@Consume(name),不同的是,該給定名稱的鏈接對象是從AppStorage中獲得的,在UI組件和AppStorage之間建立雙向綁定同步數(shù)據(jù)。@StorageProp:@StorageProp(name)將UI組件數(shù)據(jù)與AppStorage進(jìn)行單向同步,AppStorage中值的更改會更新UI組件中的數(shù)據(jù),但UI組件無法更改AppStorage中的數(shù)據(jù)。AppStorage還提供了用于業(yè)務(wù)邏輯實(shí)現(xiàn)的API,用于添加、讀取、修改和刪除應(yīng)用程序的狀態(tài)數(shù)據(jù),此API所做的更改會導(dǎo)致修改的狀態(tài)數(shù)據(jù)同步到UI組件上進(jìn)行UI更新。PersistentStorage提供了一些靜態(tài)方法用來管理應(yīng)用持久化數(shù)據(jù),可以將特定標(biāo)記的持久化數(shù)據(jù)鏈接到AppStorage中,并由AppStorage接口訪問對應(yīng)持久化數(shù)據(jù),或者通過@StorageLink裝飾器來訪問對應(yīng)key的變量。Environment是框架在應(yīng)用程序啟動時創(chuàng)建的單例對象,它為AppStorage提供了一系列應(yīng)用程序需要的環(huán)境狀態(tài)數(shù)據(jù),這些數(shù)據(jù)描述了應(yīng)用程序運(yùn)行的設(shè)備環(huán)境。03完成任務(wù)所需知識清單

渲染控制根據(jù)不同的條件做出不同的界面渲染效果ArkTS提供了條件渲染和循環(huán)渲染兩種渲染控制能力。本節(jié)介紹條件渲染:使用if/else進(jìn)行條件渲染,說明如下:if/else條件語句可以使用狀態(tài)變量,并且在更新場景下必須使用狀態(tài)變量。使用if/else可以使子組件的渲染依賴條件語句。必須在容器組件內(nèi)使用。某些容器組件限制子組件的類型或數(shù)量,將if/else用于這些組件內(nèi)時,這些限制將同樣應(yīng)用于if/else語句內(nèi)創(chuàng)建的組件。例如,Grid容器組件的子組件僅支持GridItem組件,在Grid內(nèi)使用if/else時,則if/else語句內(nèi)也僅允許使用GridItem組件。if/else語句的每個分支都包含一個構(gòu)建UI的描述,此類描述中必須創(chuàng)建一個或多個子組件。在初始渲染時,if語句會執(zhí)行其中的一個條件成立的分支并將生成的子組件添加到if/else的父組件中。每當(dāng)if或elseif條件語句中使用的狀態(tài)變量發(fā)生變化時,條件渲染都會更新并重新進(jìn)行條件評估,如果分支條件發(fā)生了變化,這意味著需要構(gòu)建另一個條件分支,此時框架將刪除所有以前渲染的組件,然后執(zhí)行條件成立分支的UI描述,將生成的子組件添加到其父組件中。03完成任務(wù)所需知識清單

渲染控制根據(jù)不同的條件做出不同的界面渲染效果示例:狀態(tài)變量count的初值為10,build函數(shù)中采用if語句進(jìn)行條件渲染,根據(jù)count的值顯示不同內(nèi)容。當(dāng)點(diǎn)擊文字時,count減一。由于count是狀態(tài)變量,它的變化會引起if條件的重新評估,這樣可以看到顯示內(nèi)容隨著count的減少不斷變化。1@Entry2@Component3structIfElseExample{4@Statecount:number=105build(){6Column(){7if(this.count<0){8Text('countisnegative').fontSize(14)9}elseif(this.count%2===0){10Text('countiseven').fontSize(14)11}else{12Text('countisodd').fontSize(14)13}14}.width('100%').onClick(()=>{15this.count=this.count-1;16})17}18}04完成任務(wù)所需知識清單

權(quán)限申請某些情況下,應(yīng)用需要訪問額外的系統(tǒng)或其他應(yīng)用的數(shù)據(jù)或功能,系統(tǒng)或應(yīng)用也必須以明確的方式對外提供接口來共享其數(shù)據(jù)或功能。ATM(AccessTokenManager)是HarmonyOS上基于AccessToken構(gòu)建的統(tǒng)一的應(yīng)用權(quán)限管理能力。默認(rèn)情況下,應(yīng)用只能訪問有限的系統(tǒng)資源。但某些情況下,應(yīng)用需要訪問額外的系統(tǒng)或其他應(yīng)用的數(shù)據(jù)或功能,系統(tǒng)或應(yīng)用也必須以明確的方式對外提供接口來共享其數(shù)據(jù)或功能。HarmonyOS提供了一種訪問控制機(jī)制來保證這些數(shù)據(jù)或功能不會被不當(dāng)或惡意使用,即應(yīng)用權(quán)限。應(yīng)用權(quán)限保護(hù)的對象可以分為數(shù)據(jù)和功能。數(shù)據(jù)包含了個人數(shù)據(jù)(如照片、通訊錄、日歷、位置等)、設(shè)備數(shù)據(jù)(如設(shè)備標(biāo)識、相機(jī)、麥克風(fēng)等)、應(yīng)用數(shù)據(jù)。功能則包括了設(shè)備功能(如打電話、發(fā)短信、聯(lián)網(wǎng)等)、應(yīng)用功能(如彈出懸浮框、創(chuàng)建快捷方式等)等。應(yīng)用權(quán)限是程序訪問或操作某種對象的通行證,它使得系統(tǒng)可以規(guī)范各類應(yīng)用程序的行為準(zhǔn)則,實(shí)現(xiàn)用戶隱私的保護(hù)機(jī)制。當(dāng)應(yīng)用訪問或操作目標(biāo)對象時,目標(biāo)對象會對應(yīng)用進(jìn)行權(quán)限檢查,如果沒有對應(yīng)權(quán)限,則訪問或操作將被拒絕。當(dāng)前,ATM提供的應(yīng)用權(quán)限校驗(yàn)功能是基于統(tǒng)一管理的TokenID(Tokenidentity)。TokenID是每個應(yīng)用的身份標(biāo)識,ATM通過應(yīng)用的TokenID來管理應(yīng)用的權(quán)限。04完成任務(wù)所需知識清單

權(quán)限申請某些情況下,應(yīng)用需要訪問額外的系統(tǒng)或其他應(yīng)用的數(shù)據(jù)或功能,系統(tǒng)或應(yīng)用也必須以明確的方式對外提供接口來共享其數(shù)據(jù)或功能。(1)權(quán)限使用的基本原則在進(jìn)行權(quán)限的申請和使用時,需要滿足以下基本原則:應(yīng)用申請的權(quán)限,都必須有明確、合理的使用場景和功能說明,確保用戶能夠清晰明了地知道申請權(quán)限的目的、場景、用途;禁止誘導(dǎo)、誤導(dǎo)用戶授權(quán);應(yīng)用使用權(quán)限必須與申請所述一致。應(yīng)用權(quán)限申請遵循最小化原則,只申請業(yè)務(wù)功能所必要的權(quán)限,禁止申請不必要的權(quán)限。應(yīng)用在首次啟動時,避免頻繁彈窗申請多個權(quán)限;權(quán)限須在用戶使用對應(yīng)業(yè)務(wù)功能時動態(tài)申請。用戶拒絕授予某個權(quán)限時,與此權(quán)限無關(guān)的其他業(yè)務(wù)功能應(yīng)能正常使用,不能影響應(yīng)用的正常注冊或登錄。業(yè)務(wù)功能所需要的權(quán)限被用戶拒絕且禁止后不再提示,當(dāng)用戶主動觸發(fā)使用此業(yè)務(wù)功能或?yàn)閷?shí)現(xiàn)業(yè)務(wù)功能所必須時,應(yīng)用程序可通過界面內(nèi)文字引導(dǎo),讓用戶主動到“系統(tǒng)設(shè)置”中授權(quán)。當(dāng)前不允許應(yīng)用自行定義權(quán)限,應(yīng)用申請的權(quán)限應(yīng)該從已有的權(quán)限列表中選擇。已有權(quán)限列表參看華為開發(fā)者網(wǎng)站的相關(guān)說明。04完成任務(wù)所需知識清單

權(quán)限申請某些情況下,應(yīng)用需要訪問額外的系統(tǒng)或其他應(yīng)用的數(shù)據(jù)或功能,系統(tǒng)或應(yīng)用也必須以明確的方式對外提供接口來共享其數(shù)據(jù)或功能。(2)權(quán)限等級說明根據(jù)接口所涉數(shù)據(jù)的敏感程度或所涉能力的安全威脅影響,ATM模塊定義了不同開放范圍的權(quán)限等級來保護(hù)用戶隱私。能力權(quán)限等級APL(AbilityPrivilegeLevel)指的是應(yīng)用的權(quán)限申請優(yōu)先級的定義,不同APL等級的應(yīng)用能夠申請的權(quán)限等級不同。應(yīng)用的權(quán)限等級可以分為三個等級:APL級別說明normal等級普通應(yīng)用。默認(rèn)情況下,應(yīng)用的APL等級都為normal等級。normal權(quán)限允許應(yīng)用訪問超出默認(rèn)規(guī)則外的普通系統(tǒng)資源。這些系統(tǒng)資源的開放(包括數(shù)據(jù)和功能)對用戶隱私以及其他應(yīng)用帶來的風(fēng)險很小。該類型的權(quán)限僅向APL等級為normal及以上的應(yīng)用開放。system_basic等級該等級的應(yīng)用服務(wù)提供系統(tǒng)基礎(chǔ)服務(wù)。system_basic權(quán)限允許應(yīng)用訪問操作系統(tǒng)基礎(chǔ)服務(wù)相關(guān)的資源。這部分系統(tǒng)基礎(chǔ)服務(wù)屬于系統(tǒng)提供或者預(yù)置的基礎(chǔ)功能,比如系統(tǒng)設(shè)置、身份認(rèn)證等。這些系統(tǒng)資源的開放對用戶隱私以及其他應(yīng)用帶來的風(fēng)險較大。該類型的權(quán)限僅向APL等級為system_basic及以上的應(yīng)用開放。system_core等級該等級的應(yīng)用服務(wù)提供操作系統(tǒng)核心能力。system_core權(quán)限涉及到開放操作系統(tǒng)核心資源的訪問操作。這部分系統(tǒng)資源是系統(tǒng)最核心的底層服務(wù),如果遭受破壞,操作系統(tǒng)將無法正常運(yùn)行。鑒于該類型權(quán)限對系統(tǒng)的影響程度非常大,目前暫不向任何三方應(yīng)用開放。04完成任務(wù)所需知識清單

權(quán)限申請某些情況下,應(yīng)用需要訪問額外的系統(tǒng)或其他應(yīng)用的數(shù)據(jù)或功能,系統(tǒng)或應(yīng)用也必須以明確的方式對外提供接口來共享其數(shù)據(jù)或功能。(3)權(quán)限類型說明根據(jù)授權(quán)方式的不同,權(quán)限類型可分為system_grant(系統(tǒng)授權(quán))和user_grant(用戶授權(quán))。system_grantsystem_grant指的是系統(tǒng)授權(quán)類型,在該類型的權(quán)限許可下,應(yīng)用被允許訪問的數(shù)據(jù)不會涉及到用戶或設(shè)備的敏感信息,應(yīng)用被允許執(zhí)行的操作不會對系統(tǒng)或者其他應(yīng)用產(chǎn)生大的不利影響。如果在應(yīng)用中申請了system_grant權(quán)限,那么系統(tǒng)會在用戶安裝應(yīng)用時,自動把相應(yīng)權(quán)限授予給應(yīng)用。應(yīng)用需要在應(yīng)用商店的詳情頁面,向用戶展示所申請的system_grant權(quán)限列表。user_grantuser_grant指的是用戶授權(quán)類型,在該類型的權(quán)限許可下,應(yīng)用被允許訪問的數(shù)據(jù)將會涉及到用戶或設(shè)備的敏感信息,應(yīng)用被允許執(zhí)行的操作可能對系統(tǒng)或者其他應(yīng)用產(chǎn)生嚴(yán)重的影響。該類型權(quán)限不僅需要在安裝包中申請權(quán)限,還需要在應(yīng)用動態(tài)運(yùn)行時,通過發(fā)送彈窗的方式請求用戶授權(quán)。在用戶手動允許授權(quán)后,應(yīng)用才會真正獲取相應(yīng)權(quán)限,從而成功訪問操作目標(biāo)對象。比如說,在權(quán)限定義列表中,麥克風(fēng)和攝像頭對應(yīng)的權(quán)限都是屬于用戶授權(quán)權(quán)限,列表中給出了詳細(xì)的權(quán)限使用理由。應(yīng)用需要在應(yīng)用商店的詳情頁面,向用戶展示所申請的user_grant權(quán)限列表。04完成任務(wù)所需知識清單

權(quán)限申請某些情況下,應(yīng)用需要訪問額外的系統(tǒng)或其他應(yīng)用的數(shù)據(jù)或功能,系統(tǒng)或應(yīng)用也必須以明確的方式對外提供接口來共享其數(shù)據(jù)或功能。(4)不同權(quán)限類型的授權(quán)流程如果應(yīng)用需要獲取目標(biāo)權(quán)限,那么需要先進(jìn)行權(quán)限申請。權(quán)限申請首先,開發(fā)者需要在配置文件中聲明目標(biāo)權(quán)限。權(quán)限授權(quán)如果目標(biāo)權(quán)限是system_grant類型,開發(fā)者在進(jìn)行權(quán)限申請后,系統(tǒng)會在安裝應(yīng)用時自動為其進(jìn)行權(quán)限預(yù)授予,開發(fā)者不需要做其他操作即可使用權(quán)限。如果目標(biāo)權(quán)限是user_grant類型,開發(fā)者在進(jìn)行權(quán)限申請后,在運(yùn)行時觸發(fā)動態(tài)彈窗,請求用戶授權(quán),具體操作見user_grant權(quán)限請求授權(quán)的步驟詳解。04完成任務(wù)所需知識清單

權(quán)限申請某些情況下,應(yīng)用需要訪問額外的系統(tǒng)或其他應(yīng)用的數(shù)據(jù)或功能,系統(tǒng)或應(yīng)用也必須以明確的方式對外提供接口來共享其數(shù)據(jù)或功能。(5)user_grant權(quán)限請求授權(quán)的步驟詳解在應(yīng)用需要獲取user_grant權(quán)限時,需完成以下步驟:①在配置文件中,聲明應(yīng)用需要請求的權(quán)限;②將應(yīng)用中需要申請權(quán)限的目標(biāo)對象與對應(yīng)目標(biāo)權(quán)限進(jìn)行關(guān)聯(lián),讓用戶明確地知道,哪些操作需要用戶向應(yīng)用授予指定的權(quán)限;③運(yùn)行應(yīng)用時,在用戶觸發(fā)訪問操作目標(biāo)對象時應(yīng)該調(diào)用接口,精準(zhǔn)觸發(fā)動態(tài)授權(quán)彈框。該接口的內(nèi)部會檢查當(dāng)前用戶是否已經(jīng)授權(quán)應(yīng)用所需的權(quán)限,如果當(dāng)前用戶尚未授予應(yīng)用所需的權(quán)限,該接口會拉起動態(tài)授權(quán)彈框,向用戶請求授權(quán);④檢查用戶的授權(quán)結(jié)果,確認(rèn)用戶已授權(quán)才可以進(jìn)行下一步操作。04完成任務(wù)所需知識清單

權(quán)限申請某些情況下,應(yīng)用需要訪問額外的系統(tǒng)或其他應(yīng)用的數(shù)據(jù)或功能,系統(tǒng)或應(yīng)用也必須以明確的方式對外提供接口來共享其數(shù)據(jù)或功能。(6)示例以本章的項(xiàng)目為例,相冊需要訪問系統(tǒng)的媒體庫資源,這需要申請ohos.permission.READ_MEDIA權(quán)限。本示例以申請ohos.permission.READ_MEDIA權(quán)限為例,說明應(yīng)用中申請權(quán)限的一般做法。ohos.permission.READ_MEDIA權(quán)限是user_grant類型的權(quán)限,因此,根據(jù)前面說明,需要做兩個工作:首先需在工程配置文件module.json5中申明該權(quán)限,然后還需要在運(yùn)行時在用戶需要訪問媒體庫時觸發(fā)動態(tài)授權(quán)彈框,向用戶請求權(quán)限。輸入主題完成應(yīng)用的主界面UI框架設(shè)計任務(wù)1的實(shí)施任務(wù)目標(biāo)完成應(yīng)用所需媒體訪問權(quán)限的申請創(chuàng)建項(xiàng)目并完成應(yīng)用的主界面UI框架設(shè)計01任務(wù)1的實(shí)施

創(chuàng)建項(xiàng)目啟動開發(fā)工具DevEcoStudio,創(chuàng)建一個新項(xiàng)目,選擇“EmptyAbility”。在項(xiàng)目配置對話框中設(shè)置項(xiàng)目名為MyAlbum,項(xiàng)目類型為Application,其他相關(guān)設(shè)置參見下圖中的設(shè)置。完成這些選項(xiàng)設(shè)置后按“Finish”按鈕創(chuàng)建項(xiàng)目。02任務(wù)1的實(shí)施

主界面UI設(shè)計實(shí)現(xiàn)主界面的標(biāo)簽頁效果,標(biāo)簽頁對應(yīng)的內(nèi)容視圖由于需要讀取系統(tǒng)的媒體庫,在本步驟中暫不考慮,先用簡單文本替代,只實(shí)現(xiàn)基本框架。主界面的代碼寫在ets/pages文件夾下的Index.ets文件中,頁面代碼如代碼清單4-5所示。界面效果如下圖:03任務(wù)1的實(shí)施

應(yīng)用所需權(quán)限的申請為了在主界面的Tabs的內(nèi)容去顯示系統(tǒng)媒體庫中的圖片,需要讀取媒體庫數(shù)據(jù),這需要應(yīng)用具有媒體庫讀取權(quán)限。按照知識清單中第四個知識點(diǎn)“系統(tǒng)權(quán)限申請”的說明,讀取系統(tǒng)媒體庫需要“ohos.permission.READ_MEDIA”權(quán)限。具體步驟在工程配置文件module.json5中申明該權(quán)限,配置文件中申明權(quán)限的代碼如代碼清單4-2所示在代碼中動態(tài)申請權(quán)限。由于是啟動應(yīng)用時就彈框申請權(quán)限,因此,動態(tài)申請權(quán)限的代碼寫在應(yīng)用入口Ability的代碼文件中。在ets/entryability/EntryAbility.ts文件的最前面添加如下代碼,引入需要的模塊:importabilityAccessCtrlfrom'@ohos.abilityAccessCtrl';再將代碼清單4-3中的第12~23行的代碼加入到ets/entryability/EntryAbility.ts的onWindowStageCreate方法的最后。04任務(wù)1的實(shí)施

運(yùn)行調(diào)試如果開發(fā)機(jī)內(nèi)存在16G以上,可以采用本地模擬器調(diào)試,如內(nèi)存小于16G,應(yīng)使用遠(yuǎn)程模擬器。在設(shè)備管理器對話框選擇“遠(yuǎn)程模擬器”標(biāo)簽頁,按要求登錄華為賬號,選擇一臺遠(yuǎn)程手機(jī)模擬器進(jìn)行本項(xiàng)目的調(diào)試。由于Stage模式只要API9支持,因此,選擇P50,API選擇9,進(jìn)行調(diào)試。04任務(wù)1的實(shí)施

運(yùn)行調(diào)試如果開發(fā)機(jī)內(nèi)存在16G以上,可以采用本地模擬器調(diào)試,如內(nèi)存小于16G,應(yīng)使用遠(yuǎn)程模擬器。在設(shè)備管理器對話框選擇“遠(yuǎn)程模擬器”標(biāo)簽頁,按要求登錄華為賬號,選擇一臺遠(yuǎn)程手機(jī)模擬器進(jìn)行本項(xiàng)目的調(diào)試。由于Stage模式只要API9支持,因此,選擇P50,API選擇9,進(jìn)行調(diào)試。點(diǎn)擊開發(fā)工具的運(yùn)行按鈕,部署并運(yùn)行app??梢钥吹絘pp在模擬器中啟動,并彈出了權(quán)限確認(rèn)框在權(quán)限確認(rèn)彈框中選擇“允許”,可以看到標(biāo)簽頁的內(nèi)容視圖中顯示“所有圖片列表”,表示app獲得了讀取媒體庫的權(quán)限。任務(wù)拓展在本任務(wù)的權(quán)限申請邏輯中,利用了AppStorage容器中的全局變量與頁面上修飾器@StorageProp修飾的變量之間的自動同步能力,并利用狀態(tài)管理能力實(shí)現(xiàn)了頁面內(nèi)容與權(quán)限的同步。這種同步也可以用鴻蒙的事件機(jī)制實(shí)現(xiàn)。EventHub提供了UIAbility組件級別的事件機(jī)制,以UIAbility組件為中心提供了訂閱、取消訂閱和觸發(fā)事件的數(shù)據(jù)通信能力。在使用EventHub之前,首先需要獲取EventHub對象?;怌ontext提供了EventHub對象。代碼清單4-6是ets/entryability/EntryAbility.ts文件的onWindowStageCreate的代碼。第17行和第19行使用EventHub的emit方法發(fā)送"test"事件通知,并攜帶一個boolean型數(shù)據(jù)。在ets/pages/Index.ets頁面文件中,通過EventHub對象可以訂閱事件,具體做法如清單文件4-7所示。第10~14行中通過EventHub的on函數(shù)訂閱了“test”事件,當(dāng)收到事件通知時執(zhí)行第二個參數(shù)中定義的方法代碼。完成了項(xiàng)目主要的界面設(shè)計和應(yīng)用所需權(quán)限的申請,項(xiàng)目可以彈出權(quán)限確認(rèn)框請用戶確權(quán),根據(jù)用戶許可情況顯示不同內(nèi)容。完成了本任務(wù)的開發(fā)之后,就可以在已有代碼基礎(chǔ)上進(jìn)行媒體數(shù)據(jù)訪問部分的開發(fā)了。完成的編碼Tabs組件狀態(tài)管理?xiàng)l件渲染系統(tǒng)權(quán)限申請學(xué)到的知識任務(wù)小結(jié)任務(wù)小結(jié)任務(wù)2讀取并展示媒體庫的圖片02任務(wù)目標(biāo)及重點(diǎn)難點(diǎn)任務(wù)描述在任務(wù)4-1的代碼基礎(chǔ)上實(shí)現(xiàn)從系統(tǒng)媒體庫讀取圖片,并實(shí)現(xiàn)這些圖片在界面上的展示功能。任務(wù)目的1、知識目標(biāo):(1)掌握媒體庫圖片的讀取方法;(2)掌握彈性布局的使用;(3)掌握常用控件的使用;(4)掌握循環(huán)渲染的使用2、能力目標(biāo):(1)能編媒體庫訪問程序(2)能編寫自適應(yīng)布局界面3、素質(zhì)目標(biāo):(1)培養(yǎng)良好的編程習(xí)慣重難點(diǎn)1、重點(diǎn):(1)媒體庫圖片讀取;(2)彈性布局(3)循環(huán)渲染2、難點(diǎn):(1)媒體庫圖片讀??;(2)循環(huán)渲染1423彈性布局循環(huán)渲染媒體庫的讀取Image組件知識清單完成任務(wù)所需知識清單01完成任務(wù)所需知識清單本任務(wù)用彈性布局組件Flex實(shí)現(xiàn)圖片列表的顯示,關(guān)于Flex組件的詳細(xì)說明參見項(xiàng)目2中任務(wù)2-1的知識清單中關(guān)于布局組件的說明。彈性布局Flex組件

02完成任務(wù)所需知識清單下面代碼清單是實(shí)現(xiàn)循環(huán)渲染的語句的基本語法:循環(huán)渲染通過循環(huán)渲染(ForEach)從數(shù)組中獲取數(shù)據(jù),并為每個數(shù)據(jù)項(xiàng)創(chuàng)建相應(yīng)的組件,可實(shí)現(xiàn)數(shù)據(jù)的動態(tài)展示效果并減少代碼復(fù)雜度。

ForEach(arr:any[],itemGenerator:(item:any,index?:number)=>void,keyGenerator?:(item:any,index?:number)=>string)參數(shù)名參數(shù)類型必填參數(shù)描述arrany[]是必須是數(shù)組,允許設(shè)置為空數(shù)組,空數(shù)組場景下將不會創(chuàng)建子組件。同時允許設(shè)置返回值為數(shù)組類型的函數(shù),例如arr.slice(1,3)。itemGenerator(item:any,index?:number)=>void是生成子組件的lambda函數(shù),為數(shù)組中的每一個數(shù)據(jù)項(xiàng)創(chuàng)建一個或多個子組件,單個子組件或子組件列表必須包括在大括號“{...}”中。keyGenerator(item:any,index?:number)=>string否用于給數(shù)組中的每一個數(shù)據(jù)項(xiàng)生成唯一且固定的鍵值。當(dāng)數(shù)據(jù)項(xiàng)在數(shù)組中的位置更改時,其鍵值不得更改,當(dāng)數(shù)組中的數(shù)據(jù)項(xiàng)被新項(xiàng)替換時,被替換項(xiàng)的鍵值和新項(xiàng)的鍵值必須不同。鍵值生成器的功能是可選的,不提供時框架默認(rèn)使用index+JSON.stringify(item)的方式生成。為了使開發(fā)框架能夠更好地識別數(shù)組更改,提高性能,建議開發(fā)者提供自定義的鍵值生成器。如將數(shù)組反向時,如果沒有提供鍵值生成器,則ForEach中的所有節(jié)點(diǎn)都將重建。02完成任務(wù)所需知識清單循環(huán)渲染通過循環(huán)渲染(ForEach)從數(shù)組中獲取數(shù)據(jù),并為每個數(shù)據(jù)項(xiàng)創(chuàng)建相應(yīng)的組件,可實(shí)現(xiàn)數(shù)據(jù)的動態(tài)展示效果并減少代碼復(fù)雜度。

ForEach函數(shù)的使用說明:ForEach必須在容器組件內(nèi)使用。生成的子組件應(yīng)當(dāng)是允許包含在ForEach父容器組件中的子組件。允許子組件生成器函數(shù)中包含if/else條件渲染。鍵值生成器必須針對每個數(shù)據(jù)生成唯一的值,如果鍵值相同,將導(dǎo)致鍵值相同的UI組件被框架忽略,從而無法在父容器內(nèi)顯示。itemGenerator函數(shù)的調(diào)用順序不一定和數(shù)組中的數(shù)據(jù)項(xiàng)相同,在開發(fā)過程中不要假設(shè)itemGenerator和keyGenerator函數(shù)是否執(zhí)行及其執(zhí)行順序。02完成任務(wù)所需知識清單循環(huán)渲染通過循環(huán)渲染(ForEach)從數(shù)組中獲取數(shù)據(jù),并為每個數(shù)據(jù)項(xiàng)創(chuàng)建相應(yīng)的組件,可實(shí)現(xiàn)數(shù)據(jù)的動態(tài)展示效果并減少代碼復(fù)雜度。

示例:下面代碼清單中,數(shù)組arr中存放了3個整數(shù),F(xiàn)orEack遍歷該數(shù)組,將數(shù)組中的每個元素生成為頁面中的一個Text組件和一個Divider組件。1@Entry2@Component3structIndex{4@Statearr:number[]=[10,20,30]56build(){7Column({space:5}){8ForEach(this.arr,(item:number)=>{9Text(`itemvalue:${item}`).fontSize(18)10Divider().strokeWidth(2).color(Color.Black)11},(item:number)=>item.toString())12}13}14}03完成任務(wù)所需知識清單媒體庫讀取系統(tǒng)媒體庫資源包括音頻、視頻和圖片資源,本章只涉及圖片資源方面的知識。媒體庫涉及用戶個人數(shù)據(jù)信息,所以應(yīng)用首先需要向用戶申請媒體庫讀寫操作權(quán)限才能保證功能的正常運(yùn)行。

涉及的權(quán)限如下表所示:權(quán)限名說明授權(quán)方式ohos.permission.READ_MEDIA允許應(yīng)用讀取用戶外部存儲中的媒體文件信息。user_grantohos.permission.WRITE_MEDIA允許應(yīng)用讀寫用戶外部存儲中的媒體文件信息。user_grantohos.permission.MEDIA_LOCATION允許應(yīng)用訪問用戶媒體文件中的地理位置信息。user_grant03完成任務(wù)所需知識清單媒體庫讀取系統(tǒng)媒體庫資源包括音頻、視頻和圖片資源,本章只涉及圖片資源方面的知識。媒體庫涉及用戶個人數(shù)據(jù)信息,所以應(yīng)用首先需要向用戶申請媒體庫讀寫操作權(quán)限才能保證功能的正常運(yùn)行。

由于本任務(wù)只需要讀取媒體數(shù)據(jù),因此需要申請ohos.permission.READ_MEDIA權(quán)限。權(quán)限申請的步驟及代碼參見任務(wù)4-1的知識清單及任務(wù)的實(shí)施部分。在獲得用戶對讀取媒體的權(quán)限許可后,就可以開始讀取媒體數(shù)據(jù)了?;镜拈_發(fā)步驟為:①導(dǎo)入mediaLibrary模塊以使用媒體庫相關(guān)接口。②通過getContext獲取應(yīng)用上下文。③獲取媒體庫實(shí)例。關(guān)鍵代碼如代碼清單4-10所示。04完成任務(wù)所需知識清單Image組件Image是圖片組件,支持本地圖片和網(wǎng)絡(luò)圖片的渲染展示。

Image是圖片組件,支持本地圖片和網(wǎng)絡(luò)圖片的渲染展示。Image的接口語法為:Image(src:string|PixelMap|Resource)參數(shù)說明見下表說明。參數(shù)名參數(shù)類型必填參數(shù)描述srcstring|

PixelMap

|

Resource是圖片的數(shù)據(jù)源,支持本地圖片和網(wǎng)絡(luò)圖片。當(dāng)使用相對路徑引用圖片資源時,例如Image("common/test.jpg"),不支持跨包/跨模塊調(diào)用該Image組件,建議使用$r方式來管理需全局使用的圖片資源。-支持的圖片格式包括png、jpg、bmp、svg和gif。-支持datashare://路徑前綴的字符串,用于訪問通過dataability提供的圖片路徑。圖片加載前需要。-支持file:///data/storage路徑前綴的字符串,用于讀取本應(yīng)用安裝目錄下files文件夾下的圖片資源。需要保證目錄包路徑下的文件有可讀權(quán)限。04完成任務(wù)所需知識清單Image組件Image是圖片組件,支持本地圖片和網(wǎng)絡(luò)圖片的渲染展示。

示例:圖片組件屬性示例。先將兩張圖片復(fù)制到entry模塊的src/main/resources/base/media下,再編寫如代碼4-3(掃描二維碼)所示的代碼。第一步:讀取媒體庫圖片第二步:在“照片”標(biāo)簽內(nèi)容視圖中顯示所有圖片第三步:調(diào)試“照片”標(biāo)簽的功能第五步:顯示選中相冊中的所有照片第四步:在“相冊”標(biāo)簽內(nèi)容視圖中顯示所有相冊封面第六步:調(diào)試“相冊”標(biāo)簽的功能任務(wù)2的實(shí)施任務(wù)1實(shí)現(xiàn)了基本UI框架,界面中用一個Tabs組件呈現(xiàn)了兩個標(biāo)簽頁,但標(biāo)簽頁的內(nèi)容視圖中還沒有用圖片填充,本任務(wù)將在此基礎(chǔ)上完成用媒體庫圖片填充內(nèi)容視圖的功能。任務(wù)目標(biāo)實(shí)施步驟01任務(wù)2的實(shí)施

讀取媒體庫圖片選擇entry模塊的main文件夾并點(diǎn)擊鼠標(biāo)右鍵,選擇“New”,再選“Directory”

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論