精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

HarmonyOS實現(xiàn)動態(tài)申請授權(quán)

系統(tǒng) OpenHarmony
本期筆者將以一個Demo為例,與讀者們共同探討在ArkUI的框架中如何實現(xiàn)動態(tài)申請授權(quán)的功能。

應(yīng)用向用戶動態(tài)申請授權(quán),是指在用戶使用應(yīng)用的過程中,應(yīng)用方會根據(jù)應(yīng)用場景和業(yè)務(wù)向用戶動態(tài)地請求相應(yīng)的權(quán)限。例如,當(dāng)應(yīng)用需要訪問用戶的相機(jī)或麥克風(fēng)時,會向用戶彈出一個授權(quán)請求框,詢問用戶是否允許應(yīng)用訪問這些設(shè)備,而用戶可以選擇允許或拒絕此次授權(quán)請求。這種方式可以提高應(yīng)用的安全性,在一定程度上保護(hù)用戶的隱私信息安全。

Nothing theoretical can be clearer than the code.  本期筆者將以一個Demo為例,與讀者們共同探討在ArkUI的框架中如何實現(xiàn)動態(tài)申請授權(quán)的功能。

通常情況下,一些提供基礎(chǔ)功能的權(quán)限可以通過靜態(tài)的方式獲取(即直接將開發(fā)者需要的權(quán)限在模塊級別的module.json5文件中聲明),如聯(lián)網(wǎng)權(quán)限。而對于一些能夠為應(yīng)用提供用戶的隱私數(shù)據(jù)的敏感權(quán)限,則需要以動態(tài)的方式可視化地向用戶申請。本期的Demo以申請獲取大致位置權(quán)限(即"ohos.permission.APPROXIMATELY_LOCATION")為例,實現(xiàn)動態(tài)申請權(quán)限的功能。

新建工程

打開DevEco Studio(開發(fā)工具的版本必須支持API9),創(chuàng)建一個新的project,相關(guān)勾選如下:

在module.json5中添加相應(yīng)的權(quán)限

成功創(chuàng)建工程后,在工程文件目錄中打開目錄:entry/src/main/module.json5, 添加兩個權(quán)限——定位權(quán)限( "ohos.permission.LOCATION")和獲取大致位置的權(quán)限("ohos.permission.APPROXIMATELY_LOCATION" )。

{
  "module": {
    "name": "entry",
    "type": "entry",
    "description": "$string:module_desc",
    "mainElement": "EntryAbility",
    "deviceTypes": [
      "phone"
    ],
    "deliveryWithInstall": true,
    "installationFree": false,
    "pages": "$profile:main_pages",

    //添加模塊所需的相關(guān)權(quán)限
    "requestPermissions": [
      {
        "name": "ohos.permission.APPROXIMATELY_LOCATION",
        "usedScene": {
          "abilities": [
            "EntryAbility"
          ],
          "when": "inuse"
        }
      },
      {
        "name": "ohos.permission.LOCATION",
        "usedScene": {
          "abilities": [
            "EntryAbility"
          ],
          "when": "inuse"
        }
      },
    ],

    ......

  }
}

事實上,當(dāng)應(yīng)用同時獲取以上兩種權(quán)限后,應(yīng)用可以獲取設(shè)備的精準(zhǔn)位置,精準(zhǔn)度在米級別。

集成功能模塊

要實現(xiàn)向用戶動態(tài)申請授權(quán)的功能,我們需要制作兩個功能模塊,分別是檢查是否已獲得所需權(quán)限的功能和向用戶發(fā)起權(quán)限申請的功能。為了達(dá)到公共調(diào)用和功能模塊化,我們需要將這兩個功能模塊集成到兩個不同的TypeScript文件中,并將可調(diào)用接口導(dǎo)出。

在ets文件夾下新建目錄,并將其命名為Service。

在Service目錄下新建兩個TypeScript文件(右鍵Service目錄,選擇新建,再選擇TypeScript),分別命名為Detector與Applicant。

在編輯器中打開Detector.ts,加入以下代碼以集成檢查應(yīng)用是否已獲得所需權(quán)限的功能,各代碼塊的具體功能已寫注解。

//導(dǎo)入程序訪問控制管理模塊
import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl';

//導(dǎo)入包管理模塊
import bundleManager from '@ohos.bundle.bundleManager';

///定義待檢測的權(quán)限列表
const permissionsList: Array<Permissions> = ['ohos.permission.APPROXIMATELY_LOCATION']     //權(quán)限數(shù)據(jù)的列表

//模塊的日志標(biāo)簽
const TAG = '------[Detector] '

const APPROVAL:number = 0

//默認(rèn)導(dǎo)出的模塊接口
export default async function Check_Access(){

  //創(chuàng)建AtManager實例
  let atManager = abilityAccessCtrl.createAtManager()

  //定義局部變量grantStatus
  let grantStatus:abilityAccessCtrl.GrantStatus

  //定義局部變量tokenId
  let tokenId:number

  try{

    //等待包管理模塊獲取本模塊所在的包的BundleInfo
    let bundleInfo:bundleManager.BundleInfo = await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)
    //獲取上述BundleInfo中攜帶的ApplicationInfo
    let appInfo:bundleManager.ApplicationInfo = bundleInfo.appInfo
    //獲上述ApplicationInfo攜帶的accessTokenId
    tokenId = appInfo.accessTokenId

  }catch (err){
    console.error(TAG+`getBundleInfoForSelf failed, code is ${err.code}, message is ${err.message}`)
  }

  try{
    //利用AtManager實例檢查是否已獲得所需權(quán)限
    grantStatus = await atManager.checkAccessToken(tokenId,permissionsList[0])
  }catch (err){
    console.error(TAG+`checkAccessToken failed, code is ${err.code}, message is ${err.message}`)
  }

  //根據(jù)不同的檢查結(jié)果做不同的輸出
  if(grantStatus == APPROVAL){
    console.info(TAG+'Accessible')
    return true
  }else {
    console.error(TAG+'Inaccessible')
    return false
  }

}

因為筆者已給代碼添加了注釋,所以筆者就不對這個模塊做太多啰嗦的分析了。這個模塊的大致執(zhí)行邏輯是,通過調(diào)用系統(tǒng)能力@ohos.bundle.bundleManager獲取本包的accessTokenId,再調(diào)用系統(tǒng)能力@ohos.abilityAccessCtrl,在傳入accessTokenId和權(quán)限列表的條件下檢查module是否已獲取權(quán)限列表中的每個權(quán)限。當(dāng)atManager的異步方法checkAccessToken返回結(jié)果為0時,表示所需權(quán)限均已被提供。

在編輯器中打開Applicant.ts,加入以下代碼以集成向用戶發(fā)起權(quán)限申請的功能,各代碼塊的具體功能已寫注解。

//導(dǎo)入程序訪問控制管理模塊
import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl'

//導(dǎo)入common
import common from '@ohos.app.ability.common';

//定義待動態(tài)申請的權(quán)限列表
const permissionsList: Array<Permissions> = ['ohos.permission.APPROXIMATELY_LOCATION']

const APPROVAL:number = 0

//模塊的日志標(biāo)簽
const TAG = '------[Applicant] '

//默認(rèn)導(dǎo)出的模塊接口
export default async function Request_Permission_From_Users(context:common.UIAbilityContext){

  //預(yù)定義函數(shù)執(zhí)行結(jié)果的狀態(tài)
  let isFinished:boolean = false

  //創(chuàng)建AtManager實例
  let atManager = abilityAccessCtrl.createAtManager()

  //等待程序訪問控制模塊完成權(quán)限請求的異步操作,完成后根據(jù)返回結(jié)果執(zhí)行then()或catch()
  await atManager.requestPermissionsFromUser(context, permissionsList).then((result)=>{

    //將API返回的數(shù)據(jù)存儲到變量grantStatus中
    let grantStatus: Array<number> = result.authResults

    //判斷用戶是否提供所有相關(guān)權(quán)限
    for(let i = 0 ; i < grantStatus.length ; i++){
      if(grantStatus[i] === APPROVAL){   //用戶提供所有權(quán)限, ===指的是全等
        console.info(TAG+'Succeed! Obtain all the permissions')
        isFinished = true   //將函數(shù)執(zhí)行結(jié)果的狀態(tài)設(shè)置為true
      }else{   //用戶未提供所有權(quán)限
        console.error(TAG+'User denies providing the permissions')
      }
    }
  }).catch((err)=>{
    console.error(TAG+`Request permission failed, code is ${err.code}, message is ${err.message}`)
  })

  return isFinished

}

這個模塊的大致執(zhí)行邏輯是,在atManager的異步方法requestPermissionsFromUser。

中傳入所需的上下文對象和待申請權(quán)限列表,并等待其異步過程的結(jié)束。在requestPermissionsFromUser的異步過程中,系統(tǒng)會彈出選擇框,詢問用戶是否提供權(quán)限。當(dāng)用戶點(diǎn)擊選擇框中的允許或禁止時,權(quán)限會被授予或否,異步過程隨即結(jié)束(此處指的是申請單個權(quán)限的場景),requestPermissionsFromUser將申請結(jié)果以number型數(shù)組的形式輸出。當(dāng)此數(shù)組中的每個元素的值都為0時,表示所有權(quán)限都成功獲得,否則,用戶拒絕授權(quán)了至少一個權(quán)限。

Detector.ts和Applicant.ts均默認(rèn)導(dǎo)出了接口,想要在其他地方調(diào)用它們的功能,只需導(dǎo)入接口即可。

編輯頁面UI

添加圖片資源

在工程文件目錄中打開目錄:src/main/resources/rawfile, 添加兩張任意的圖片(可以在IDE中將待添加的圖片資源直接粘貼至rawfile目錄下,也可以在文件資源管理器中通過文件路徑打開rawfile目錄并添加圖片資源),分別命名為image1和image2。當(dāng)然,圖片的格式?jīng)]有要求,只要在之后的步驟中能被正確引用即可。

設(shè)計頁面UI

打開Index.ets,刪除原有的Text組件,新增兩個Button組件和一個Image組件(相關(guān)屬性設(shè)置如下),并聲明一個用@state修飾的布爾變量ifAccessible。

@Entry
@Component
struct Index {

  //將應(yīng)用是否獲取權(quán)限這條信息用布爾型變量ifAccessible儲存
  @State ifAccessible:boolean = false

  build() {
    Row() {
      Column() {

        //添加兩個Button組件和一個Image組件

        //條件渲染Image組件
        if(this.ifAccessible){
          Image($rawfile('image2.png'))
            .height(200)
            .width(200)
        }else{
          Image($rawfile('image1.png'))
            .height(200)
            .width(200)
        }

                //第一個Button組件
        Button('檢查應(yīng)用是否獲得權(quán)限')
          .fontSize(20)
          .width('70%')
          .margin({
            top:40
          })
          .backgroundColor(Color.Pink)

                //第二個Button組件
        Button('向用戶動態(tài)申請權(quán)限')
          .fontSize(20)
          .width('70%')
          .margin({
            top:20
          })
          .backgroundColor(Color.Pink)

      }
      .width('100%')
    }
    .height('100%')
  }
}

預(yù)覽器效果如下:

添加自定義彈窗

首先,在組件Index之外用struct聲明一個新的自定義組件dialog,并用裝飾器@CustomDialog對其進(jìn)行修飾,使dialog擁有成為自定義彈窗的能力。接著,我們對彈窗顯示的內(nèi)容進(jìn)行自定義設(shè)置,在build函數(shù)中加入自定義UI聲明。其中,CustomDialogController類型的成員變量controller和字符串類型成員變量message皆必不可少,后者可用于對dialog的外部傳參。

之后,我們在組件Index中new兩個彈窗控制器( CustomDialogController類的實例),并分別將它們賦予兩個私有成員變量(dialogController_Accessible和dialogController_Inaccessible)以供調(diào)用。當(dāng)然,我們是用兩個message不同的dialog組件來構(gòu)造這兩個彈窗控制器的,所以彈窗控制器dialogController_Accessible和彈窗控制器dialogController_Inaccessible可用于打開和關(guān)閉它們所對應(yīng)的dialog。

@Entry
@Component
struct Index {
  @State message: string = 'Hello World'

     ......

  //new兩個彈窗控制器
  private dialogController_Accessible : CustomDialogController = new CustomDialogController({
    builder:dialog({
      message:'已獲取權(quán)限'
    })
  })

  private dialogController_Inaccessible : CustomDialogController = new CustomDialogController({
    builder:dialog({
      message:'暫未獲取權(quán)限'
    })
  })
  build() {
        ......
    }

}

//自定義彈窗
@CustomDialog
struct dialog{

  controller:CustomDialogController

  @State message:string = ''

  build(){
    Column() {
      Text(this.message)
        .fontSize(20)
        .height(40)
        .fontColor(Color.White)
    }
    .width('100%')
    .backgroundColor(Color.Gray)
  }

}

編寫回調(diào)方法

首先,我們從先前步驟中已集成的功能模塊Detector導(dǎo)入異步函數(shù)Check_Access,并自定義異步方法detect。在detect的方法體中,我們通過關(guān)鍵字await等待異步過程,這意味者原本的異步任務(wù)變成了一個等價的延時同步任務(wù),保證了detect中操作語句的順序執(zhí)行。由于關(guān)鍵字await只能在異步方法或異步函數(shù)中出現(xiàn),所以detect必須是異步方法。根據(jù)Check_Access的不同返回結(jié)果(成功或失敗),系統(tǒng)會生成不同內(nèi)容的彈窗與用戶交互。detect()編寫完后,我們在用于檢查應(yīng)用是否獲得權(quán)限的Button組件的onclick事件中加入此異步方法。

import Check_Access from 'ets/Service/Detector'  //從模塊Detector中導(dǎo)入異步函數(shù)Check_Access

@Entry
@Component
struct Index {

  .....

  //編寫異步方法detect,調(diào)用之前已寫好的模塊文件Detector
  async detect(){
    let res = await Check_Access()
    this.ifAccessible = res
    if(res){
      this.dialogController_Accessible.open()
    }else{
      this.dialogController_Inaccessible.open()
    }

  }
    ......
  build() {
    Row() {
      Column() {

                ......


        Button('檢查應(yīng)用是否獲得權(quán)限')
          .fontSize(20)
          .width('70%')
          .margin({
            top:40
          })
          .backgroundColor(Color.Pink)
          //設(shè)置onclick回調(diào),并調(diào)用異步函數(shù)detect()
          .onClick(()=>{
            this.detect()
          })
            ......
      }
      .width('100%')
    }
    .height('100%')
  }
}
......

接著,我們從先前步驟中已集成的功能模塊Applicant中導(dǎo)入異步函數(shù)Request_Permission_From_Users,并導(dǎo)入common。隨后,我們通過getContext方法獲取上下文對象,并將其轉(zhuǎn)化為UIAbilityContext類型,存入私有成員變量context中。之后,自定義異步方法apply,在方法體中將成員變量context傳入異步函數(shù)Request_Permission_From_Users中。這樣以后,我們便可在用于向用戶動態(tài)申請權(quán)限的Button組件的onclick事件中加入自定義方法apply了。

......
import Request_Permission_From_Users from 'ets/Service/Applicant'
import common from '@ohos.app.ability.common'

@Entry
@Component
struct Index {

  ......

  //獲取上下文對象, 儲存在成員變量context中
  private context = getContext(this) as common.UIAbilityContext

  //編寫異步方法,調(diào)用之前已寫好的模塊文件Applicant
  async apply(){
    let res = await Request_Permission_From_Users(this.context)
    this.ifAccessible = res
    if(res){
      this.dialogController_Accessible.open()
    }else{
      this.dialogController_Inaccessible.open()
    }
  }
    ......

  build() {
    Row() {
      Column() {

        ......

        Button('向用戶動態(tài)申請權(quán)限')
          .fontSize(20)
          .width('70%')
          .margin({
            top:20
          })
          .backgroundColor(Color.Pink)
          //設(shè)置onclick回調(diào),并調(diào)用異步函數(shù)apply()
          .onClick(()=>{
            this.apply()
          })

      }
      .width('100%')
    }
    .height('100%')
  }
}

......

至此,本期的Demo完成了。

真機(jī)&模擬機(jī)調(diào)試

Demo完成之后,我們需要用模擬器或真機(jī)來運(yùn)行以查看效果。

事實上,變量ifAccessible的值應(yīng)該保存在本地的數(shù)據(jù)庫里,這樣每次重新創(chuàng)建此Demo的頁面實例時,才能正確地顯示對應(yīng)圖像,讀者們可以自行修復(fù)這個bug。

當(dāng)然,我們也可以打開日志欄,通過日志信息觀察功能模塊的運(yùn)行。打開編輯器下方的Hilog,勾選'show only js log',并在標(biāo)簽篩選欄中輸入0FEFE,過濾后的日志信息如下。

圖片

責(zé)任編輯:姜華 來源: 鴻蒙開發(fā)者社區(qū)
相關(guān)推薦

2023-10-20 14:16:24

ArkUI動態(tài)申請授權(quán)

2021-09-15 23:28:20

開源項目Jetbrains

2021-06-07 14:39:58

鴻蒙HarmonyOS應(yīng)用

2011-04-07 14:04:28

SQL動態(tài)交叉表

2017-05-11 21:30:01

Android動態(tài)代理ServiceHook

2015-07-23 15:15:06

動態(tài)彈出

2020-06-19 12:59:33

動態(tài)腳本Java

2009-09-14 19:14:51

LINQ動態(tài)查詢

2018-06-04 16:20:56

Linux動態(tài)路由Quagga

2024-08-06 14:29:37

2009-07-22 13:04:41

iBATIS動態(tài)查詢

2009-02-27 10:04:25

動態(tài)基礎(chǔ)架構(gòu)NEDC

2010-09-09 08:52:19

JavascriptDIV

2015-09-28 15:59:00

Java動態(tài)代理機(jī)制

2022-06-16 10:38:24

URL權(quán)限源代碼

2009-06-19 14:45:28

Hibernate S

2014-08-07 10:00:42

achartengin

2010-05-12 16:13:04

2021-05-10 09:44:32

鴻蒙HarmonyOS應(yīng)用

2022-04-06 07:50:57

JWT后端Spring
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

久久久国产精品久久久| 9l视频自拍9l视频自拍| 在线观看国产区| 永久亚洲成a人片777777| 精品噜噜噜噜久久久久久久久试看| av网站手机在线观看| 黄色影院在线播放| 国产另类ts人妖一区二区| 26uuu亚洲国产精品| 久久嫩草捆绑紧缚| 一本色道久久综合亚洲精品酒店| 69堂成人精品免费视频| 欧美在线观看成人| 中日韩高清电影网| 中文字幕av一区二区三区免费看| 国内一区二区在线视频观看| 一区二区日韩在线观看| 亚洲女同同性videoxma| 欧美老少做受xxxx高潮| 亚洲无人区码一码二码三码的含义 | 美女喷白浆视频| av在线播放资源| 国产精品短视频| 日本一区二区免费看| 亚洲国产精品欧美久久| 精品在线免费视频| 国产精品吴梦梦| 国产综合精品视频| 91久久在线| 久久久www成人免费精品张筱雨| 日本一级免费视频| 一本久久青青| 国产视频精品免费播放| 深田咏美中文字幕| 亚洲精品观看| 717成人午夜免费福利电影| 动漫av免费观看| 国产盗摄——sm在线视频| 亚洲欧美一区二区三区极速播放 | 黄色成人在线| 国产精品成人免费精品自在线观看| 欧美二区在线| 男人天堂综合| 久久久亚洲欧洲日产国码αv| 国产一区二区免费在线观看| 欧美熟妇乱码在线一区| 成人精品鲁一区一区二区| 亚洲最大av在线| 99热这里只有精品在线观看| 国产一区二区三区在线看麻豆| 成人免费在线网址| 国产精品久久久久久无人区| 紧缚奴在线一区二区三区| 国产精品一区电影| 一级久久久久久| 日韩电影在线观看一区| 国产精品日韩久久久久| 亚洲无码精品国产| 国产一区二区三区四区五区入口| 91色p视频在线| 国产成人精品无码高潮| 岛国一区二区在线观看| 九色综合日本| 精品av中文字幕在线毛片| 国产日产精品一区| 中文字幕99| 日本电影在线观看| 精品久久久国产| 无遮挡又爽又刺激的视频| 欧美xnxx| 欧美一区二区网站| 你懂的在线观看网站| 久久av中文| 久久精品久久精品亚洲人| 国产va在线播放| 99成人在线| 国产精品久久久久久久av大片| 国产乱码久久久久| 成人毛片在线观看| 日韩欧美一区二区视频在线播放| 麻豆影视在线观看_| 亚洲国产精品久久久久婷婷884| 免费看一级大黄情大片| 激情小说亚洲| 欧美大片在线观看| 国产精品密蕾丝袜| 欧美在线不卡| 国产成+人+综合+亚洲欧美丁香花| 亚洲天堂男人网| 国产成人av资源| 日韩久久久久久久久久久久久| 激情视频在线观看| 狠狠躁夜夜躁人人爽超碰91| 污污的视频免费观看| 精品久久97| 精品国产视频在线| 免费av网站在线| 国产精品乡下勾搭老头1| 免费在线观看一区二区| 伊人手机在线| 欧美日韩夫妻久久| 亚洲国产果冻传媒av在线观看| 日韩激情免费| 庆余年2免费日韩剧观看大牛| 国产乱淫av片免费| 国产午夜亚洲精品不卡| 成人一级生活片| 美女视频一区| 亚洲男人第一网站| 久久精品视频日本| 精久久久久久久久久久| 日韩亚洲一区在线播放| 久草免费在线视频| 日韩精品一区二区三区老鸭窝| 香蕉成人在线视频| 久久一区二区三区四区五区 | 亚洲欧美另类一区| 中文字幕中文字幕在线一区| 国产成人精品无码播放| 成人在线视频中文字幕| 久久天天躁狠狠躁夜夜躁| 欧美 日韩 精品| 99久久久久久| 久久亚洲精品无码va白人极品| 亚洲图片小说区| 中文亚洲视频在线| 天天射天天干天天| 久久久不卡影院| 日韩欧美一区二| 国产欧美自拍一区| 色综合久久精品亚洲国产| 亚洲综合网av| 中文字幕国产一区| 天天爽天天爽夜夜爽| 国产精品亚洲二区| 日韩av成人在线| 国产中文字幕在线视频| 色综合久久精品| 成年人网站免费看| 亚洲伊人网站| 欧美日产一区二区三区在线观看| 看黄在线观看| 亚洲美女视频网| www.国产com| 国产色产综合色产在线视频| 91av在线免费播放| 精品久久美女| 国产精品美女久久| 午夜激情在线观看| 91精品中文字幕一区二区三区| 日本免费网站视频| 国产一区在线观看视频| 欧美少妇一级片| 精品一区二区三区中文字幕视频 | 日韩av电影免费在线观看| 日日av拍夜夜添久久免费| 亚洲天堂网站在线观看视频| 亚洲av无码乱码国产精品fc2| 亚洲国产精品成人综合 | 91丨九色porny丨蝌蚪| 日韩免费一级视频| 精品国产乱码久久久久久果冻传媒| 国产大片精品免费永久看nba| 999国产在线视频| 欧美精品久久99| 欧美精品99久久久| 91在线国产福利| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 欧美日一区二区| 91网站免费观看| free性m.freesex欧美| 亚洲欧美日韩在线高清直播| 怡红院男人的天堂| 亚洲国产综合色| 无码熟妇人妻av| 久久99热狠狠色一区二区| 99热久久这里只有精品| 国产亚洲一区二区三区啪| 91久久国产精品| av在线资源| 日韩亚洲第一页| 天堂v在线观看| 欧美日韩不卡一区| 五月天综合在线| 国产女人aaa级久久久级 | 中文字幕免费观看视频| 成人免费在线播放视频| 欲求不满的岳中文字幕| 另类小说欧美激情| av免费观看国产| 色天天综合网| 精品麻豆av| 亚洲一区导航| 日韩av成人在线观看| 亚洲男同gay网站| 国产小视频国产精品| 隣の若妻さん波多野结衣| 欧美系列在线观看| 免费在线不卡视频| 亚洲另类色综合网站| 午夜时刻免费入口| 成人av电影在线网| 日本一二三区在线| 日精品一区二区三区| 欧美精品卡一卡二| 91精品成人| 亚洲.欧美.日本.国产综合在线| 成人h动漫免费观看网站| 国产综合视频在线观看| 亚洲妇女成熟| 亚洲18私人小影院| 手机av免费在线| 久久激情五月丁香伊人| 高清福利在线观看| 亚洲欧美国产另类| 天天av天天翘| 欧美xfplay| 国产视频手机在线观看| 在线观看视频一区二区欧美日韩| 日本少妇全体裸体洗澡| 一区二区在线观看不卡| 多男操一女视频| 国产精品理伦片| 中文字幕av久久爽一区| 久久先锋影音av鲁色资源| 伊人网综合视频| 国产精品一区久久久久| 五月天激情视频在线观看| 蜜桃视频一区| 成人午夜视频免费在线观看| 999亚洲国产精| av免费观看网| 999在线观看精品免费不卡网站| 国产真人做爰毛片视频直播| 欧美黄色aaaa| 免费cad大片在线观看| 欧美一区视频| 国产一级大片免费看| 欧美日韩精选| 国产乱子伦精品无码专区| 欧美三级午夜理伦三级中文幕| 玖玖精品在线视频| 欧美午夜一区| 国产va亚洲va在线va| 91久久夜色精品国产九色| 国产精品又粗又长| 久久成人一区| 中文字幕国内自拍| 久久99精品久久久久久| www.污网站| 粉嫩久久99精品久久久久久夜| 91超薄肉色丝袜交足高跟凉鞋| 成人免费视频免费观看| 亚洲av人人澡人人爽人人夜夜| 91丨porny丨国产| 人妻av无码一区二区三区| 欧美国产日韩精品免费观看| 极品尤物一区二区| 亚洲免费观看在线观看| 日韩精品一区三区| 福利视频一区二区| 91黑人精品一区二区三区| 欧美日韩免费不卡视频一区二区三区| 一级黄色大片免费| 日韩欧美卡一卡二| 天堂av在线免费| 一区二区成人精品| a级在线观看| 欧美一区亚洲一区| 黑人一区二区三区| 国产乱码精品一区二区三区卡 | 国产欧美一区二区精品仙草咪| 精品在线观看一区| 亚洲综合在线五月| 伊人手机在线视频| 欧美日韩1234| 免费看黄网站在线观看| 亚洲天堂av女优| huan性巨大欧美| 日本高清视频一区| www久久久| 快播亚洲色图| 亚洲欧美色图| 久久久久久久激情| 国产一区二区不卡| 国产精品扒开腿做爽爽| 亚洲精品自拍动漫在线| 九九热精品视频在线| 777午夜精品视频在线播放| 神马午夜在线观看| www.欧美免费| 中文字幕一区久| 96久久精品| 欧美mv日韩| 黄色一级视频片| 国产精品99久久久久久久女警| 香蕉网在线播放| 一区二区三区蜜桃网| 国产精品尤物视频| 亚洲精品狠狠操| av色综合久久天堂av色综合在| 奇米影视亚洲狠狠色| 日韩一区二区三区精品视频第3页| 日本高清久久一区二区三区| 国产精品v欧美精品v日本精品动漫| 男人插女人下面免费视频| 成人福利视频网站| 中文字幕在线观看成人| 欧美三级日韩在线| 亚洲区小说区图片区| 欧美日韩高清在线观看| 欧美高清你懂的| 免费一区二区三区在在线视频| 一区在线免费观看| 少妇高潮一69aⅹ| 国产精品不卡在线观看| 中国一区二区视频| 亚洲人成伊人成综合网久久久| 9lporm自拍视频区在线| 亚洲自拍小视频免费观看| 99久久精品国产亚洲精品| 美女网站视频黄色| 久久久美女艺术照精彩视频福利播放| 久久精品国产av一区二区三区| 日韩一区二区在线免费观看| 蜜桃视频在线观看免费视频网站www| 国产精品成人v| 禁果av一区二区三区| 男人天堂网视频| 99精品欧美一区二区蜜桃免费| 国产无码精品在线播放| 精品国产a毛片| 国产精品69xx| 国产一区二区无遮挡 | 亚洲一二三区av| 国产女人18水真多18精品一级做| 黄色污污网站在线观看| 亚洲一级黄色片| 日韩av首页| 亚洲精美视频| 狠狠色丁香婷综合久久| 欧美亚洲日本在线| 日韩午夜激情免费电影| 亚洲夜夜综合| 狠狠色综合色区| 亚洲综合精品| 国产av自拍一区| 欧美日韩一级二级三级| 黄色成人在线观看| 丁香婷婷久久久综合精品国产| 欧美午夜免费影院| 中文字幕一区三区久久女搜查官| 亚洲成人av一区二区三区| 色欲av伊人久久大香线蕉影院| 91爱视频在线| 精品理论电影| 亚洲 国产 图片| 亚洲国产色一区| 韩日在线视频| 成人激情电影一区二区| 欧美日韩调教| 亚洲午夜久久久久久久久红桃| 欧美视频一区在线| 欧美日韩经典丝袜| 久久艳妇乳肉豪妇荡乳av| 热久久国产精品| 日韩激情综合网| 日韩av在线免费观看一区| 国产一区二区三区影视| 中国女人做爰视频| 成人丝袜视频网| 黄色一级视频免费看| 久久精品视频中文字幕| 麻豆成人入口| 中国黄色片免费看| 亚洲一区二区三区四区五区中文 | 欧美大成色www永久网站婷| 高清精品视频| 午夜激情在线观看视频| 一区二区三区在线播| 欧美日韩国产综合视频| 成人在线一区二区| 亚洲精品社区| 三级黄色在线观看| 日韩毛片在线看| 亚洲图片小说区| 国产极品美女高潮无套久久久| 中文字幕一区二区在线观看| 色一情一乱一区二区三区| 国产日韩欧美91| 一区二区三区国产在线| 午夜爱爱毛片xxxx视频免费看| 亚洲欧美日韩中文在线| 中文字幕一区二区三区日韩精品| 成人性做爰aaa片免费看不忠| 一区二区三区av电影| 永久免费av在线| 久久波多野结衣| 成人国产一区二区三区精品| 亚洲熟妇av乱码在线观看|