
什么是Context上下文
在我剛開始看到Context上下文的時(shí)候覺得比較抽象,只知道它是用來拉起權(quán)限或者獲取應(yīng)用的一些信息,但是卻一直不知道它到底是什么,設(shè)計(jì)者是怎么定義的?這篇文章就來簡單聊聊"Context上下文"到底是什么?
我們先從表層上看,Context翻譯過來字面意思就是上下文,從初高中學(xué)語文的知識來看,意思就是文章的語境,背景和環(huán)境等等跟文章相聯(lián)系的內(nèi)容。
但是我們將其代入到程序中,其實(shí)也可以從語文的角度也可以解釋得通,就是抽象化了一下,Context這個(gè)字段在程序中通俗的講就是指執(zhí)行一個(gè)任務(wù)所需要的相關(guān)信息,這個(gè)任務(wù)可以是一個(gè)進(jìn)程,一個(gè)線程。而在OpenHarmony和HarmonyOS北向開發(fā)中分別為ability與application提供了Context上下文的能力,包括訪問ability或application的任務(wù)資源、請求和驗(yàn)證權(quán)限等。
在HarmonyOS&OpenHarmony中的Context應(yīng)用上下文概述
Context是應(yīng)用中對象的上下文,提供獲取應(yīng)用程序環(huán)境信息的能力。
OpenHarmony的應(yīng)用框架分為FA模型和Stage兩種模型。對應(yīng)存在兩套Context機(jī)制適配兩種應(yīng)用框架模型,其中application/BaseContext屬于通用的Context基類,里面包含一個(gè)屬性stageMode,用來區(qū)分開發(fā)模型是FA還是Stage。
Context會在后續(xù)開發(fā)獲取系統(tǒng)信息能力的過程中經(jīng)常遇到,所以必須對Context上下文含義以及如何使用有一定的了解。
下面來簡單用代碼實(shí)現(xiàn)幾個(gè)例子,工程創(chuàng)建參考上一章節(jié)即可。
代碼實(shí)操
接下來先用Context上下文獲取有關(guān)當(dāng)前應(yīng)用程序的信息:
import featureAbility from '@ohos.ability.featureAbility'
import bundle from '@ohos.bundle'
onInit(){
let context = featureAbility.getContext();//創(chuàng)建Context實(shí)例對象
context.getApplicationInfo().then((data) => {
console.info("CHW=====================>getApplicationInfoCallback===================>");
console.info("CHW====>data====>" + JSON.stringify(data))
});
}
將代碼編譯成HAP包然后安裝到開發(fā)板或者手機(jī)上,就可以將調(diào)試臺切換到log窗口,查看輸出的調(diào)試信息,可以看到第三行輸出的就是我們要有關(guān)當(dāng)前應(yīng)用程序的信息。

獲取當(dāng)前ability的包名:
import featureAbility from '@ohos.ability.featureAbility'
import bundle from '@ohos.bundle'
onInit(){
let context = featureAbility.getContext();//創(chuàng)建Context實(shí)例對象
context.getBundleName().then((data) => {
console.info("CHW=======================>getBundleNameCallback====================>");
console.info("CHW====>data====>" + JSON.stringify(data));
});
}

粗體獲取此ability的當(dāng)前顯示方向:
import featureAbility from '@ohos.ability.featureAbility'
onInit(){
let context = featureAbility.getContext();//創(chuàng)建Context實(shí)例對象
context.getDisplayOrientation().then((data) => {
console.info("CHW=======================>getDisplayOrientatinotallow====================>");
console.info("CHW====>data====>" + JSON.stringify(data));
});
}

改變此ability的當(dāng)前顯示方向?yàn)闄M屏顯示:

import featureAbility from '@ohos.ability.featureAbility'
import bundle from '@ohos.bundle' //導(dǎo)入Bundle模塊以獲取屏幕顯示方向DisplayOrientation對象
onInit(){
let context = featureAbility.getContext();//創(chuàng)建Context實(shí)例對象
let orientatinotallow=bundle.DisplayOrientation.LANDSCAPE;//設(shè)置方向參數(shù)為橫屏
context.setDisplayOrientation(orientation).then((data) => {
console.info("CHW=======================>setDisplayOrientatinotallow====================>");
console.info("CHW====>data====>" + JSON.stringify(data));
});
}

??想了解更多關(guān)于開源的內(nèi)容,請?jiān)L問:??
??51CTO 開源基礎(chǔ)軟件社區(qū)??
??https://ost.51cto.com??。