哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

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

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

一款好用的鴻蒙系統(tǒng)上的權(quán)限請(qǐng)求框架

OpenHarmony技術(shù)社區(qū) ? 來源:HarmonyOS技術(shù)社區(qū) ? 作者:HarmonyOS技術(shù)社區(qū) ? 2021-12-03 10:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

申請(qǐng)權(quán)限

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

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

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

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

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

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

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

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

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

桃夭的使用方式

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

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

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

添加依賴:

api'io.gitee.zhongte1.0.1'

申請(qǐng)權(quán)限:

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

}

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

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

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

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

實(shí)現(xiàn)原理

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

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

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

/**
*獲取在配置文件中聲明的權(quán)限
*
*@paramcontext上下文
*@return在配置文件中聲明的權(quán)限
*/
privateListgetConfigPermissions(Contextcontext){
//獲取bundleManager對(duì)象
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("請(qǐng)?jiān)谂渲梦募新暶饕暾?qǐng)的權(quán)限");
}
returnreqPermissionDetails;
}catch(RemoteExceptione){
e.printStackTrace();
}
returnnewArrayList<>();
}

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

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

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

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

/**
*是否有權(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;
}

③判斷用戶是否點(diǎn)擊了不再提醒

通過上下文對(duì)象的 canRequestPermission 方法來判斷用戶是否點(diǎn)擊了不再提醒。

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

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

如果用戶點(diǎn)擊了不再提醒,則可以跳轉(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();
}
}

⑤啟動(dòng)透明的 Ability 申請(qǐng)權(quán)限

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

如下代碼:

/**
*開啟一個(gè)透明的Ability來申請(qǐng)權(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);
//請(qǐng)求權(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);
}
}

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

如何將 Ability 設(shè)置透明,如下代碼。在 abilities 節(jié)點(diǎn)添加 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 變成透明的了,同時(shí)也不會(huì)發(fā)生頁面跳轉(zhuǎn)。

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

判斷用戶是否授予權(quán)限,可以使用標(biāo)準(zhǔ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;
}

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

比如,申請(qǐng)錄音權(quán)限,當(dāng)系統(tǒng)回調(diào) onRequestPermissionsFromUserResult 方法時(shí),直接去錄音,如果發(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)時(shí),上面的兩種方式都使用了。至此,桃夭框架的原理基本上講完。有興趣的同學(xué)可以去看看源碼。

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

    關(guān)注

    30

    文章

    4975

    瀏覽量

    74332
  • 權(quán)限
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

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

    關(guān)注

    183

    文章

    2642

    瀏覽量

    70090

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    STPC? CONSUMER-II:一款強(qiáng)大的x86核心PC兼容信息家電片系統(tǒng)

    STPC? CONSUMER-II:一款強(qiáng)大的x86核心PC兼容信息家電片系統(tǒng) 在當(dāng)今的電子世界中,片系統(tǒng)(SoC)的發(fā)展日新月異,為各
    的頭像 發(fā)表于 04-17 15:05 ?30次閱讀

    文搞懂Linux權(quán)限體系

    Linux權(quán)限體系是運(yùn)維工作的基礎(chǔ)中的基礎(chǔ)。無論你管理的是單機(jī)還是集群,權(quán)限問題導(dǎo)致的故障占總故障量的相當(dāng)比例。本文從線運(yùn)維視角出發(fā),系統(tǒng)講解Linux
    的頭像 發(fā)表于 04-09 10:04 ?140次閱讀

    MAX20484:一款強(qiáng)大的電源系統(tǒng)監(jiān)控芯片

    : MAX20484.pdf 芯片概述 MAX20484是一款完全符合ASIL D標(biāo)準(zhǔn)的片系統(tǒng)(SoC)電源系統(tǒng)監(jiān)控器,它最多支持五個(gè)電壓監(jiān)控輸入。每個(gè)輸入都具備可編程的過壓(OV)
    的頭像 發(fā)表于 03-02 09:20 ?190次閱讀

    SC-3568HA:解鎖鴻蒙權(quán)限API與分布式能力的工業(yè)控制平臺(tái)

    傳統(tǒng)嵌入式開發(fā)面臨硬件碎片化、高權(quán)限功能缺失、分布式協(xié)同復(fù)雜及自動(dòng)化測試不足等痛點(diǎn)。SC-3568HA開發(fā)板基于鴻蒙系統(tǒng),通過統(tǒng)內(nèi)核抽象層和硬件驅(qū)動(dòng)
    的頭像 發(fā)表于 12-18 11:27 ?7495次閱讀
    SC-3568HA:解鎖<b class='flag-5'>鴻蒙</b>全<b class='flag-5'>權(quán)限</b>API與分布式能力的工業(yè)控制平臺(tái)

    一款基于Java+Spring Boot+Vue的智慧隨訪管理系統(tǒng)源碼

    智慧隨訪管理系統(tǒng)源碼,一款基于Java+Spring Boot+Vue的B/S架構(gòu)醫(yī)院隨訪管理系統(tǒng)源碼,采用前后端分離技術(shù)(Ant-Design+MySQL5),具有自主版權(quán)和落地案例。 隨訪管理
    的頭像 發(fā)表于 11-13 15:38 ?489次閱讀
    <b class='flag-5'>一款</b>基于Java+Spring Boot+Vue的智慧隨訪管理<b class='flag-5'>系統(tǒng)</b>源碼

    開源鴻蒙技術(shù)大會(huì)2025丨開源鴻蒙應(yīng)用開發(fā)再提速,跨平臺(tái)框架PMC(籌)正式啟動(dòng)孵化

    9月27日,開源鴻蒙技術(shù)大會(huì)2025在長沙國際會(huì)議中心盛大舉辦。大會(huì)現(xiàn)場,開源鴻蒙跨平臺(tái)框架PMC(籌)正式啟動(dòng)孵化,標(biāo)志著開源鴻蒙在應(yīng)用開發(fā)基礎(chǔ)設(shè)施建設(shè)層面迎來重大里程碑,也為整個(gè)行
    的頭像 發(fā)表于 11-10 18:15 ?1561次閱讀
    開源<b class='flag-5'>鴻蒙</b>技術(shù)大會(huì)2025丨開源<b class='flag-5'>鴻蒙</b>應(yīng)用開發(fā)再提速,跨平臺(tái)<b class='flag-5'>框架</b>PMC(籌)正式啟動(dòng)孵化

    靈動(dòng)微電子最新最火熱的一款芯片推薦

    希望找一款靈動(dòng)微電子最新最火熱的一款芯片,我們想做個(gè)圖形化的界面配置,供大家以后直接創(chuàng)建工程,用國產(chǎn)工具M(jìn)cuStudio做,McuStudio支持任何內(nèi)核任何廠家的芯片,希望大家有推薦的型號(hào)可以發(fā)給我
    發(fā)表于 10-29 17:15

    知乎開源“智能預(yù)渲染框架” 幾行代碼實(shí)現(xiàn)鴻蒙應(yīng)用頁面“秒開”

    近日,知乎在Gitee平臺(tái)開源了其自研的鴻蒙“智能預(yù)渲染框架”,并將該框架的Har包上架到OpenHarmony三方庫中心倉。該框架鴻蒙
    的頭像 發(fā)表于 08-29 14:32 ?696次閱讀
    知乎開源“智能預(yù)渲染<b class='flag-5'>框架</b>” 幾行代碼實(shí)現(xiàn)<b class='flag-5'>鴻蒙</b>應(yīng)用頁面“秒開”

    【匯思博SEEK100開發(fā)板試用體驗(yàn)】在開發(fā)板鴻蒙OS搭建QT開發(fā)環(huán)境

    ,為鴻蒙設(shè)備開發(fā)原生性能應(yīng)用。Qt for HarmonyOS 的核心是個(gè) QPA 插件(Qt Platform Abstraction),其作用是將 Qt 的窗口系統(tǒng)鴻蒙的 UI
    發(fā)表于 08-24 18:34

    技術(shù)文章 | Ubuntu權(quán)限管理攻略

    將從基礎(chǔ)原理到實(shí)戰(zhàn)操作,全面解析Ubuntu權(quán)限管理的核心知識(shí)。權(quán)限管理三角:用戶、組與權(quán)限Ubuntu采用多用戶多任務(wù)的操作系統(tǒng)設(shè)計(jì),
    的頭像 發(fā)表于 08-14 12:02 ?1113次閱讀
    技術(shù)文章 | Ubuntu<b class='flag-5'>權(quán)限</b>管理攻略

    NVMe高速傳輸之?dāng)[脫XDMA設(shè)計(jì)之12:PCIe請(qǐng)求模塊設(shè)計(jì)(

    請(qǐng)求模塊負(fù)責(zé)將系統(tǒng)請(qǐng)求轉(zhuǎn)換為AXIS接口的TLP信號(hào)或配置管理接口信號(hào),處理初始化配置請(qǐng)求和門鈴寫請(qǐng)求。初始化
    的頭像 發(fā)表于 08-04 09:52 ?701次閱讀
    NVMe高速傳輸之?dāng)[脫XDMA設(shè)計(jì)之12:PCIe<b class='flag-5'>請(qǐng)求</b>模塊設(shè)計(jì)(<b class='flag-5'>上</b>)

    中軟國際正式啟動(dòng)鴻蒙軟件工場

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

    Kuikly鴻蒙版正式開源 —— 揭秘卓越性能適配之旅

    6倍 Kuikly鴻蒙版對(duì)齊Android版高性能表現(xiàn),與原生打開速度基本致 總體適配方案 Kuikly架構(gòu)回顧和優(yōu)勢(shì) Kuikly是個(gè)碼多端、追求極致性能、動(dòng)態(tài)化、原生體驗(yàn)的開
    發(fā)表于 06-04 16:46

    KaihongOS筆記本電腦開發(fā)實(shí)戰(zhàn)第九節(jié):全功能TypeC驅(qū)動(dòng)框架適配

    連接、全智能時(shí)代搭建個(gè)智能終端設(shè)備操作系統(tǒng)框架和平臺(tái),促進(jìn)萬物互聯(lián)產(chǎn)業(yè)的繁榮發(fā)展。 KaihongOS: 深開鴻基于開源鴻蒙打造的國產(chǎn)化操作系統(tǒng)
    發(fā)表于 05-19 18:29

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

    在Linux的廣闊天空中,權(quán)限管理猶如只翱翔的雄鷹,掌控著系統(tǒng)的安全與秩序。掌握Linux權(quán)限,不僅能讓你的系統(tǒng)管理更加得心應(yīng)手,還能有效
    的頭像 發(fā)表于 05-06 13:44 ?897次閱讀
    Linux<b class='flag-5'>權(quán)限</b>管理基礎(chǔ)入門
    会理县| 桐城市| 潮安县| 黎平县| 枣阳市| 东平县| 肥乡县| 盐源县| 安庆市| 张掖市| 东源县| 清河县| 电白县| 泽州县| 全州县| 新巴尔虎右旗| 贞丰县| 庐江县| 筠连县| 翁牛特旗| 稻城县| 清苑县| 安阳市| 旬阳县| 陈巴尔虎旗| 英吉沙县| 顺昌县| 揭东县| 若羌县| 镶黄旗| 黎川县| 辰溪县| 云龙县| 隆德县| 吴桥县| 辉南县| 福州市| 兖州市| 万盛区| 简阳市| 龙陵县|