女人荫蒂被添全过程13种图片,亚洲+欧美+在线,欧洲精品无码一区二区三区 ,在厨房拨开内裤进入毛片

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用鴻蒙系統(tǒng)上權(quán)限請求框架桃夭

OpenHarmony技術(shù)社區(qū) ? 來源:簡書 ? 作者:裴云飛 ? 2021-11-10 09:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

桃夭是鴻蒙系統(tǒng)上的一款權(quán)限請求框架,對請求權(quán)限的代碼進行高度封裝,極大的簡化了申請權(quán)限的代碼邏輯,同時支持在 Ability、FractionAbility、AbilitySlice、Fractiion 里面申請權(quán)限。

建議大家把源碼下載下來看看:
https://gitee.com/zhongte/TaoYao

申請權(quán)限

申請權(quán)限的一般步驟如下

  • 判斷是否有權(quán)限,如果有權(quán)限,直接進行下一步。

  • 如果沒有權(quán)限,可以彈窗告知用戶申請權(quán)限的原因。

  • 彈窗告知用戶后,如果用戶同意申請權(quán)限,則判斷用戶是否點擊了不再提醒。

  • 如果用戶沒有點擊不再提醒,則開始申請權(quán)限。

  • 如果用戶點擊了不再提醒,則彈窗告知用戶去設(shè)置頁面開啟權(quán)限,用戶點擊彈窗后,跳轉(zhuǎn)到設(shè)置頁面。

  • 重寫 onRequestPermissionsFromUserResult 方法,判斷用戶是否授予權(quán)限。

每次申請權(quán)限的時候,都需要經(jīng)過以上幾個步驟,當(dāng)申請的權(quán)限越來越多,大量的重復(fù)代碼就出現(xiàn)了。

為了減少重復(fù)代碼,我封裝了一個權(quán)限請求框架,權(quán)限請求框架取名為桃夭。

桃夭的使用方式

如下代碼,先添加依賴,然后你只需要告知權(quán)限請求框架你需要什么權(quán)限,權(quán)限請求框架就會告知你權(quán)限申請成功還是失敗。

你不需要手動判斷是否有權(quán)限,不需要彈窗告知用戶申請權(quán)限的原因,不需要判斷用戶是否點擊了不再提醒,不需要跳轉(zhuǎn)設(shè)置頁面讓用戶開啟權(quán)限,不需要重寫 onRequestPermissionsFromUserResult 方法。

框架把這些代碼邏輯都給做了,你只需要關(guān)注權(quán)限申請成功還是失敗。申請權(quán)限變得如此之簡單。

添加依賴:

api'io.gitee.zhongte1.0.1'

申請權(quán)限:

//申請多設(shè)備協(xié)同權(quán)限
EasyPermission.requestPermission(this,EasyPermission.DISTRIBUTED_DATASYNC,newPermissionAction(){
@Override
publicvoidonGranted(Listpermissions){
//權(quán)限申請成功

}

@Override
publicvoidonDenied(Listpermissions){
//權(quán)限申請失敗
}
},SystemPermission.DISTRIBUTED_DATASYNC);

申請權(quán)限的時候可能會涉及到兩個彈窗,一個彈窗是用來告知用戶申請權(quán)限的原因,另一個彈窗是用來告知用戶去設(shè)置頁面開啟權(quán)限。

這兩個彈窗在不同的應(yīng)用里面可能長得不一樣,所以這兩個彈窗并沒有被封裝到桃夭框架里面,而是需要使用者根據(jù)你的彈窗樣式對桃夭進行二次封裝。

我在源碼里面對桃夭框架進行了二次封裝,大家可以把源碼下載下來,參考下我是如何對桃夭框架進行二次封裝的。二次封裝完成后,就可以愉快的使用上面的代碼申請權(quán)限了。

實現(xiàn)原理

①檢測申請的權(quán)限是否在配置文件中聲明

申請的權(quán)限必須在配置文件中聲明,否則桃夭會直接拋異常。如何檢測申請的權(quán)限是否在配置文件中聲明。

如下代碼,獲取 bundleManager 對象,通過 bundleManager 對象獲取應(yīng)用信息,之后就可以獲取應(yīng)用在配置文件中聲明的權(quán)限了。

/**
*獲取在配置文件中聲明的權(quán)限
*
*@paramcontext上下文
*@return在配置文件中聲明的權(quán)限
*/
privateListgetConfigPermissions(Contextcontext){
//獲取bundleManager對象
IBundleManagerbundleManager=context.getBundleManager();
StringbundleName=context.getBundleName();
try{
//獲取應(yīng)用信息
BundleInfobundleInfo=bundleManager.getBundleInfo(bundleName,IBundleManager.GET_BUNDLE_WITH_REQUESTED_PERMISSION);
//獲取應(yīng)用在配置文件中聲明的權(quán)限
ListreqPermissionDetails=bundleInfo.reqPermissions;
if(reqPermissionDetails==null||reqPermissionDetails.isEmpty()){
thrownewIllegalStateException("請在配置文件中聲明要申請的權(quán)限");
}
returnreqPermissionDetails;
}catch(RemoteExceptione){
e.printStackTrace();
}
returnnewArrayList<>();
}

獲取到在配置文件中聲明的權(quán)限后,就可以判斷申請的權(quán)限是否在配置文件中了。

/**
*檢查申請的權(quán)限是否在配置文件中聲明
*
*@parampermissions要申請的權(quán)限
*/
privatevoidcheckPermissions(String...permissions){
if(permissions==null||permissions.length==0){
thrownewIllegalArgumentException("請至少申請一個權(quán)限");
}
//獲取在配置文件中聲明的權(quán)限
mReqPermissions=getConfigPermissions(mOrigin.getContext());
if(mReqPermissions.isEmpty()){
thrownewIllegalStateException("請在配置文件中聲明要申請的權(quán)限");
}
for(Stringtarget:permissions){
if(!mReqPermissions.contains(target)){
//沒有在配置中聲明要申請的權(quán)限,直接拋異常
thrownewIllegalStateException(String.format("%1$s權(quán)限沒有配置文件中聲明",target));
}
}
}

②判斷是否有權(quán)限

檢測完權(quán)限是否在配置中聲明后,就可以判斷是否有權(quán)限了。這里就是通過上下文對象的 verifySelfPermission 方法來判斷是否有權(quán)限,如果沒有權(quán)限,可以彈窗告知用戶申請的原因。

/**
*是否有權(quán)限
*
*@paramcontext
*@parampermissions
*@return
*/
@Override
publicbooleanhasPermission(Contextcontext,Listpermissions){
for(Stringpermission:permissions){
intresult=context.verifySelfPermission(permission);
if(result==IBundleManager.PERMISSION_DENIED){
//沒有權(quán)限
returnfalse;
}
}
returntrue;
}

③判斷用戶是否點擊了不再提醒

通過上下文對象的 canRequestPermission 方法來判斷用戶是否點擊了不再提醒。

/**
*用戶是否點擊了不在提醒
*
*@parampermission權(quán)限
*@return
*/
@Override
publicbooleancanRequestPermission(Stringpermission){
returnmContext.canRequestPermission(permission);
}

④跳轉(zhuǎn)到設(shè)置頁面

如果用戶點擊了不再提醒,則可以跳轉(zhuǎn)到設(shè)置頁面讓用戶開啟權(quán)限。

/**
*跳轉(zhuǎn)到設(shè)置頁面
*/
@Override
publicvoidgotoSetting(){
try{
Intentintent=newIntent();
intent.setAction(IntentConstants.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setUri(Uri.parse("package:"+mOrigin.getContext().getBundleName()));
mOrigin.startAbility(intent);
}catch(Exceptione){
e.printStackTrace();
}
}

⑤啟動透明的 Ability 申請權(quán)限

如果沒有權(quán)限,用戶頁面沒有點擊不再提醒,那就可以申請權(quán)限了。為了不讓調(diào)用者重寫 onRequestPermissionsFromUserResult 方法,桃夭內(nèi)部啟動了一個 Ability。

如下代碼:

/**
*開啟一個透明的Ability來申請權(quán)限,這樣外界就不需要重寫onRequestPermissionsFromUserResult方法
*/
publicclassPermissionAbilityextendsAbility{

privatestaticfinalintREQUEST_CODE=0X10;
publicstaticfinalStringKEY_PERMISSION="key_permission";
publicstaticfinalStringKEY_TYPE="key_type";
publicstaticfinalStringSENSITIVE_PERMISSION="sensitive_permission";

@Override
publicvoidonStart(Intentintent){
super.onStart(intent);
getWindow().setTransparent(true);
super.setUIContent(ResourceTable.Layout_ability_permission);
Listpermissions=intent.getSerializableParam(KEY_PERMISSION);
StringpermissionType=intent.getStringParam(KEY_TYPE);
//請求權(quán)限
requestPermissionsFromUser(permissions.toArray(newString[0]),REQUEST_CODE);
}

@Override
publicvoidonRequestPermissionsFromUserResult(intrequestCode,String[]permissions,int[]grantResults){
super.onRequestPermissionsFromUserResult(requestCode,permissions,grantResults);
//權(quán)限的回調(diào)方法
Postman.send(permissions,grantResults);
terminateAbility();
}

@Override
protectedvoidonAbilityResult(intrequestCode,intresultCode,IntentresultData){
super.onAbilityResult(requestCode,resultCode,resultData);
}
}

直接啟動一個 Ability 會發(fā)生頁面跳轉(zhuǎn),為了不讓頁面發(fā)生跳轉(zhuǎn),這里啟動了一個透明的 Ability。

如何將 Ability 設(shè)置透明,如下代碼。在 abilities 節(jié)點添加 metaData,這里最關(guān)鍵的是 Translucent,也就是透明。

"abilities":[
{
"orientation":"unspecified",
"name":"com.poetry.taoyao.ability.PermissionAbility",
"icon":"$media:icon",
"description":"$string:permissionability_description",
"label":"$string:taoyao_PermissionAbility",
"type":"page",
"launchType":"standard",
"metaData":{
"customizeData":[
{
"name":"hwc-theme",
"value":"androidhwext:style/Theme.Emui.Translucent.NoTitleBar"
}
]
}
}

僅僅有上面的步驟好不夠,需要在 Ability 或者 AbilitySlice 里面將窗口設(shè)置成透明。

如下代碼:

getWindow().setTransparent(true);

經(jīng)過上面兩步,也就是將 Ability 的主題和窗口都設(shè)置成透明,這樣就能將 Ability 變成透明的了,同時也不會發(fā)生頁面跳轉(zhuǎn)。

⑥判斷用戶是否授予權(quán)限

判斷用戶是否授予權(quán)限,可以使用標準的方式來判斷。也就是通過 grantResult 來判斷用戶是否授予權(quán)限。

@Override
publicbooleanhasPermission(int[]grantResults,String...permissions){
if(grantResults==null||grantResults.length<=?0){
returnfalse;
}
for(intgrantResult:grantResults){
if(grantResult==IBundleManager.PERMISSION_DENIED){
returnfalse;
}
}
returntrue;
}

其實還有另外的方式來判斷用戶是否授予權(quán)限。也就是不管用戶是否授權(quán),直接訪問相關(guān)業(yè)務(wù)。

比如,申請錄音權(quán)限,當(dāng)系統(tǒng)回調(diào) onRequestPermissionsFromUserResult 方法時,直接去錄音,如果發(fā)生異常,捕獲異常說明沒有權(quán)限。

如下代碼:

/**
*通過直接錄音的方式來判斷是否有錄音權(quán)限
*
*@paramcontext
*@return
*@throwsThrowable
*/
@Override
publicbooleantest(Contextcontext)throwsThrowable{
AudioStreamInfoaudioStreamInfo=newAudioStreamInfo.Builder().encodingFormat(
AudioStreamInfo.EncodingFormat.ENCODING_PCM_16BIT)
.channelMask(AudioStreamInfo.ChannelMask.CHANNEL_IN_STEREO)
.sampleRate(AUDIO_SAMPLE_RATE)
.build();
AudioCapturerInfoaudioCapturerInfo=newAudioCapturerInfo.Builder().audioStreamInfo(audioStreamInfo).build();
try{
AudioCapturercapturer=newAudioCapturer(audioCapturerInfo);
//錄音
capturer.start();
newTimer().schedule(newTimerTask(){
@Override
publicvoidrun(){
capturer.stop();
}
},AUDIO_RECORDING_TIME);
//沒有發(fā)生異常,有權(quán)限
returntrue;
}catch(Exceptione){
//發(fā)生異常,無權(quán)限
returnfalse;
}
}

桃夭在判斷用戶是否授權(quán)時,上面的兩種方式都使用了。至此,桃夭框架的原理基本上講完。有興趣的同學(xué)可以去看看源碼。

要看懂源碼,需要熟悉申請權(quán)限的一般步驟,桃夭其實就對這些步驟進行封裝。另外還需熟悉面向接口編程、熟悉策略模式等常見設(shè)計模式。
責(zé)任編輯:haq
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7130

    瀏覽量

    125343
  • 鴻蒙系統(tǒng)
    +關(guān)注

    關(guān)注

    183

    文章

    2642

    瀏覽量

    67955
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2143

    瀏覽量

    32635

原文標題:一款好用的鴻蒙權(quán)限請求框架!

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    中軟國際正式啟動鴻蒙軟件工場

    自2024年HarmonyOS NEXT版本起,HarmonyOS應(yīng)用框架層更新為鴻蒙“單框架”,正式告別了對Android應(yīng)用框架、內(nèi)核的依賴。2025年,
    的頭像 發(fā)表于 06-17 15:44 ?253次閱讀

    Linux權(quán)限管理基礎(chǔ)入門

    在Linux的廣闊天空中,權(quán)限管理猶如一只翱翔的雄鷹,掌控著系統(tǒng)的安全與秩序。掌握Linux權(quán)限,不僅能讓你的系統(tǒng)管理更加得心應(yīng)手,還能有效防止未授權(quán)訪問和數(shù)據(jù)泄露。本文將帶你深入探索
    的頭像 發(fā)表于 05-06 13:44 ?218次閱讀
    Linux<b class='flag-5'>權(quán)限</b>管理基礎(chǔ)入門

    鴻蒙應(yīng)用元服務(wù)開發(fā)-Account Kit配置scope權(quán)限

    : 使用場景類型:參見表1,補充描述說明(若為表1以外場景,請按實際類型填寫)。 業(yè)務(wù)場景描述:參見表1,補充描述說明(若為表1以外場景,請按實際場景填寫)。 實際使用說明:描述該權(quán)限的使用流程和每秒請求
    發(fā)表于 04-11 15:50

    【「鴻蒙操作系統(tǒng)設(shè)計原理與架構(gòu)」閱讀體驗】01-初始華為鴻蒙

    的應(yīng)用經(jīng)驗,已形成了一套較完備的理論體系。鴻蒙操作系統(tǒng)在該理論體系的基礎(chǔ),結(jié)合我國多年的產(chǎn)業(yè)化經(jīng)驗,參考學(xué)術(shù)界的最新研究成果,完成了基礎(chǔ)架構(gòu)設(shè)計。鴻蒙操作
    發(fā)表于 01-25 11:05

    云天勵飛DeepEdge10芯片與國產(chǎn)鴻蒙操作系統(tǒng)完成適配

    日前,DeepEdge10芯片已完成國產(chǎn)鴻蒙操作系統(tǒng)的適配。目前已構(gòu)建適配鴻蒙的芯片編譯平臺框架,完成圖形等子系統(tǒng)的適配。基于DeepEdg
    的頭像 發(fā)表于 01-24 10:14 ?1054次閱讀

    鴻蒙原生頁面高性能解決方案上線OpenHarmony社區(qū) 助力打造高性能原生應(yīng)用

    。 HMrouter:簡化頁面跳轉(zhuǎn)邏輯HMrouter是HarmonyOS NEXT出色的路由框架解決方案,專注于優(yōu)化應(yīng)用內(nèi)原生頁面跳轉(zhuǎn)邏輯,它封裝系統(tǒng) Navigation,集成
    發(fā)表于 01-02 18:00

    linux權(quán)限管理詳解

    權(quán)限:在計算機系統(tǒng)中,權(quán)限是指某個計算機用戶具有使用軟件資源的權(quán)利。
    的頭像 發(fā)表于 12-25 09:43 ?550次閱讀

    如何在開源鴻蒙OpenHarmony開啟SELinux模式?RK3566鴻蒙開發(fā)板演示

    本文介紹開源鴻蒙OpenHarmony系統(tǒng)下,開啟/關(guān)閉SELinux權(quán)限的方法,觸覺智能Purple Pi OH鴻蒙開發(fā)板演示,已適配全新OpenHarmony5.0 Release
    的頭像 發(fā)表于 11-18 19:03 ?803次閱讀
    如何在開源<b class='flag-5'>鴻蒙</b>OpenHarmony開啟SELinux模式?RK3566<b class='flag-5'>鴻蒙</b>開發(fā)板演示

    鴻蒙原生開發(fā)手記:01-元服務(wù)開發(fā)

    簡介 元服務(wù)是鴻蒙中的一種輕量應(yīng)用形態(tài),無需下載,直接運行。類似于微信小程序,但與小程序不同的是,元服務(wù)更加輕量。 元服務(wù)使用原生開發(fā),是系統(tǒng)級提供的,無論從易用性、性能、體驗,都要比小程序好
    發(fā)表于 11-14 17:28

    華為原生鴻蒙操作系統(tǒng)正式發(fā)布

    10月22日晚,華為舉行了一場盛大的發(fā)布會,正式推出了其原生鴻蒙操作系統(tǒng)HarmonyOS NEXT,也被稱為鴻蒙5.0。這一發(fā)布標志著鴻蒙系統(tǒng)
    的頭像 發(fā)表于 10-23 16:52 ?1098次閱讀

    鴻蒙系統(tǒng)生態(tài)設(shè)備突破10億臺 超過15000個鴻蒙原生應(yīng)用和元服務(wù)

    從操作系統(tǒng)內(nèi)核、文件系統(tǒng),到編程語言、人工智能框架和大模型等全部實現(xiàn)自研;放棄了傳統(tǒng)的Linux內(nèi)核以及安卓開源代碼項目AOSP,僅支持鴻蒙內(nèi)核和
    的頭像 發(fā)表于 10-23 16:43 ?1918次閱讀

    京東金融APP的鴻蒙之旅系列專題 新特性篇:意圖框架接入

    建議等。通過這一特性,用戶不僅可以主動搜索和調(diào)用所需服務(wù),還能享受到系統(tǒng)智能推薦的個性化建議。這將有效提升用戶體驗,帶來全新的流量增長點,并為應(yīng)用增量提供強大支持。 ? ? 意圖框架、用戶、開發(fā)者的關(guān)系如下: (圖片來自于鴻蒙
    的頭像 發(fā)表于 10-14 17:10 ?922次閱讀
    京東金融APP的<b class='flag-5'>鴻蒙</b>之旅系列專題 新特性篇:意圖<b class='flag-5'>框架</b>接入

    史無前例,移植V8虛擬機到純血鴻蒙系統(tǒng)

    層使用,為保證基于Roma框架開發(fā)的業(yè)務(wù)可以零成本、無縫運行到鴻蒙系統(tǒng),需要將Roma框架適配到鴻蒙系統(tǒng)
    的頭像 發(fā)表于 09-18 10:28 ?1700次閱讀
    史無前例,移植V8虛擬機到純血<b class='flag-5'>鴻蒙</b><b class='flag-5'>系統(tǒng)</b>

    瑞芯微RK3568鴻蒙開發(fā)板OpenHarmony系統(tǒng)修改cfg文件權(quán)限方法

    本文適用于OpenHarmony開源鴻蒙系統(tǒng)修改cfg文件權(quán)限方法,深圳觸覺智能研發(fā)的RK3566、RK3568、RK3588等開發(fā)板、主板等產(chǎn)品均適用此教程
    的頭像 發(fā)表于 09-11 13:26 ?1856次閱讀
    瑞芯微RK3568<b class='flag-5'>鴻蒙</b>開發(fā)板OpenHarmony<b class='flag-5'>系統(tǒng)</b>修改cfg文件<b class='flag-5'>權(quán)限</b>方法

    Spring Cloud Gateway網(wǎng)關(guān)框架

    推出的第二代網(wǎng)關(guān)框架,取代Zuul網(wǎng)關(guān)。網(wǎng)關(guān)作為流量的,在微服務(wù)系統(tǒng)中有著非常作用,網(wǎng)關(guān)常見的功能有路由轉(zhuǎn)發(fā)、權(quán)限校驗、限流控制等作用。 SpringCloud Gateway流程圖
    的頭像 發(fā)表于 08-22 09:58 ?711次閱讀
    Spring Cloud Gateway網(wǎng)關(guān)<b class='flag-5'>框架</b>
    主站蜘蛛池模板: 梨树县| 新余市| 宁化县| 潞城市| 安福县| 织金县| 南靖县| 芦溪县| 高陵县| 峨眉山市| 依兰县| 大埔县| 辽中县| 庄浪县| 旌德县| 湘潭县| 贵定县| 鹿泉市| 平潭县| 平顺县| 枞阳县| 湖北省| 桃源县| 宁蒗| 确山县| 普安县| 乌审旗| 纳雍县| 德兴市| 扎赉特旗| 聂拉木县| 金乡县| 青河县| 通渭县| 安陆市| 加查县| 新平| 平果县| 广河县| 全南县| 文水县|