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

HarmonyOS實現(xiàn)獲取設(shè)備地理位置

系統(tǒng) OpenHarmony
本期筆者將以一個Demo為例,幫助有需要的HarmonyOS開發(fā)者實現(xiàn)獲取設(shè)備地理位置的功能。

設(shè)備的地理位置指的是設(shè)備所在的地理坐標位置,通常以經(jīng)度,緯度和海拔高度的形式表示。地理位置信息能在許多業(yè)務(wù)場景中被應(yīng)用,如導(dǎo)航、地圖服務(wù)、位置服務(wù)、社交媒體等。通過獲取設(shè)備的地理位置,開發(fā)者可以為用戶提供個性化的服務(wù)和信息,同時有助于進行地理位置相關(guān)的功能開發(fā)和數(shù)據(jù)分析。

本期筆者將以一個Demo為例,幫助有需要的HarmonyOS開發(fā)者實現(xiàn)獲取設(shè)備地理位置的功能。

創(chuàng)建工程

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

UI設(shè)計

導(dǎo)入圖片資源

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

添加UI描述

打開Index.ets,刪除build()中原有的所有代碼塊,增加新的UI聲明和自定義彈窗,并定義一些成員變量,相關(guān)代碼如下:

@Entry
@Component
struct Index {

  title:string = '地理信息面板'

  @State Geo_Info:string = ''

    //用于存儲用戶是否授權(quán)的狀態(tài)信息
  @State ifAccessible:boolean = false

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

  private dialogController_Inaccessible : CustomDialogController = new CustomDialogController({
    builder:dialog({
      message:'獲取權(quán)限失敗 | 缺少相關(guān)權(quán)限'
    })
  })


  build() {
    Column({space:10}) {

        //新的Text組件
      Text(this.title)
        .fontSize(26)
        .fontWeight(800)
        .margin({
          top:20,
          bottom:20
        })
        .fontColor('#e699cc')

      Row(){

            //條件渲染image組件
        if(this.ifAccessible == true){
          Image($rawfile('image2.png'))
            .objectFit(ImageFit.Contain)
            .layoutWeight(1)
        }else{
          Image($rawfile('image1.png'))
            .objectFit(ImageFit.Contain)
            .layoutWeight(1)
        }

        Column(){

         //兩個新的Button組件
          Button('獲取相關(guān)權(quán)限')
            .width('90%')
            .fontSize(18)
            .backgroundColor(Color.Pink)

          Button('獲取地理位置')
            .width('90%')
            .fontSize(18)
            .backgroundColor(Color.Pink)
            .margin({
              top:14
            })

        }
        .height('100%')
        .layoutWeight(4)
        .backgroundColor(Color.White)

      }
      .height('11%')
      .width('92%')

     //新的TextArea組件
      TextArea({
        text:this.Geo_Info
      })
        .width('94%')
        .height('50%')
        .fontSize(18)
        .backgroundColor('#F0F0F0')
        .margin({
          top:20
        })

    }
    .width('100%')

  }

}

//自定義彈窗
@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)
  }

}

完成Demo的UI設(shè)計后,可以打開預(yù)覽器查看界面效果:


集成功能模塊

向用戶動態(tài)申請授權(quán)的基礎(chǔ)功能模塊

獲取設(shè)備地理位置信息的前提是用戶同意提供相關(guān)敏感權(quán)限,這意味著我們需要向用戶動態(tài)申請相關(guān)所需權(quán)限。而此次關(guān)于向用戶動態(tài)申請授權(quán)的模塊,筆者將把它們集成在Service目錄下的兩個TS文件里,分別是Applicant.ts與Detector.ts。

關(guān)于如何集成向用戶動態(tài)申請授權(quán)的模塊,以及需要在module.json5中添加哪些權(quán)限,筆者在上期博客中已詳細闡述。

上期博客的鏈接:https://ost.51cto.com/posts/27101

之后,我們在Index.ets中對其進行調(diào)用。

//導(dǎo)入common
import common from '@ohos.app.ability.common'
//導(dǎo)入向用戶發(fā)起權(quán)限申請的模塊
import Request_Permission_From_Users from 'ets/Service/Applicant'

@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() {
    Column({space:10}) {

        ......

        Column(){
          Button('獲取相關(guān)權(quán)限')
            .width('90%')
            .fontSize(18)
            .backgroundColor(Color.Pink)
            //調(diào)用異步方法apply
            .onClick(()=>{
              this.apply()
            })

            ......

        }
        .height('100%')
        .layoutWeight(4)
        .backgroundColor(Color.White)

      }
      .height('11%')
      .width('92%')

    ......

  }

}

......

獲取設(shè)備地理信息的功能模塊

此功能模塊的目的是輸出設(shè)備所在地的經(jīng)度,緯度,海拔高度和城市名,以及設(shè)備的速度(應(yīng)該是瞬時的)。這需要先獲取設(shè)備所在的地理位置坐標,再將地理位置坐標轉(zhuǎn)化為具體的地理描述(即國家,城市等)。

在Service目錄下新建一個TypeScript文件(右鍵Service目錄,選擇新建,再選擇TypeScript),將其命名為Geo。

在編輯器中打開目錄Geo.ts,加入以下代碼以集成獲取設(shè)備地理信息的功能,各代碼塊的具體功能已寫注解。

//導(dǎo)入位置服務(wù)模塊
import geoLocationManager from '@ohos.geoLocationManager';

//導(dǎo)入自定義的權(quán)限檢查模塊
import Check_Access from 'ets/Service/Detector'

//定義結(jié)點的標簽
const TAG_NODE0 = '------[Geo-Node0] '
const TAG_NODE1 = '------[Geo-Node1] '
const TAG_NODE2 = '------[Geo-Node2] '

/*
 *結(jié)點函數(shù)1:獲取用戶設(shè)備當(dāng)前所處位置的經(jīng)度和緯度數(shù)據(jù)
 */
async function Node1_Get_Geographical_Position(){

  //預(yù)定義返回值
  let output = {
    'position_x':null,
    'position_y':null,
    'position_z':null,
    'cityName':' 未知',
    'speed':null,
    //結(jié)點函數(shù)的執(zhí)行狀態(tài),默認為失敗
    'isFinished':false,
    'error':'無'
  }

  //檢查定位功能是否可用
  if(!geoLocationManager.isLocationEnabled()){
    console.info(TAG_NODE1+'Location module loads fail')
    output.error = '定位功能不可用, 請檢查設(shè)備或服務(wù)器'
    return
  }

  //定義需要輸入的請求參數(shù)
  let requestInfo = {'priority': 0x203, 'scenario': 0x300,'maxAccuracy': 0}

  //等待模塊完成獲取地理位置的異步操作
  await geoLocationManager.getCurrentLocation(requestInfo).then((result) => {
    console.info(TAG_NODE1+'Succeed! Current location => latitude: ' + result.latitude+'; longitude: '+result.longitude+';');

    //記錄獲取的地理信息
    output.position_x = result.latitude
    output.position_y = result.longitude
    output.position_z = result.altitude
    output.speed = result.speed

    //結(jié)點函數(shù)的執(zhí)行狀態(tài)修改為成功
    output.isFinished = true

  }).catch((error) => {
    console.error(TAG_NODE1+'Get current location failed, error: ' + JSON.stringify(error));
    output.error = '地理位置獲取失敗'
  });

  return output

}

/*
 *結(jié)點函數(shù)2:獲取用戶設(shè)備當(dāng)前所處的城市名稱(中文)
 */
async function Node2_Get_City_Name(input){

  //預(yù)定義返回值
  let output = {
    'cityName': ' 未知',
    'position_x':input.position_x,
    'position_y':input.position_y,
    'position_z':input.position_z,
    'speed':input.speed,
    //結(jié)點函數(shù)的執(zhí)行狀態(tài),默認為失敗
    'isFinished': false,
    'error':'無'
  }


  //判斷逆地理編碼轉(zhuǎn)換服務(wù)是否可用
  if(!geoLocationManager.isGeocoderAvailable()){
    console.error(TAG_NODE2+'Geocoder module loads fail')
    output.error = '地理編碼轉(zhuǎn)化功能不可用, 請檢查設(shè)備或服務(wù)器'
    return output
  }

  //定義需要輸入的請求參數(shù),其中l(wèi)ocale鍵對應(yīng)的值’zh‘表示服務(wù)器將返回中文形式的信息
  let reverseGeocodeRequest = {'locale':'zh',"latitude": input.position_x, "longitude": input.position_y, "maxItems": 1};

  //等待模塊完成逆地理編碼轉(zhuǎn)換的異步操作
  await geoLocationManager.getAddressesFromLocation(reverseGeocodeRequest).then((result) => {
    console.info(TAG_NODE2+'City name : ' + result[0].locality);

    //記錄獲取的城市名
    let cityName = result[0].locality
    if(cityName.charAt(cityName.length-1) == '市') cityName.replace('市','')
    output.cityName = cityName

    //結(jié)點函數(shù)的執(zhí)行狀態(tài)修改為成功
    output.isFinished = true

  }).catch((error) => {
    console.error(TAG_NODE2+'Get addresses from location: error: ' + JSON.stringify(error));
    output.error = '逆地理編碼轉(zhuǎn)換失敗'
  });

  return output

}

//導(dǎo)出可供調(diào)用的接口
export async function Get_Geo_Data(){

  //模塊結(jié)點0
  if(!Check_Access()){
    console.error(TAG_NODE0+'Insufficient required permissions')
    return {
      'position_x':null,
      'position_y':null,
      'position_z':null,
      'cityName':' 未知',
      'speed':null,
      'isFinished':false,
      'error':'設(shè)備未獲取相關(guān)權(quán)限'
    }
  }

  //模塊結(jié)點1
  let output = await Node1_Get_Geographical_Position()
  if (!output.isFinished) return output


  //模塊結(jié)點2
  return await Node2_Get_City_Name(output)

}

通常,集成這類模塊需要優(yōu)先考慮的問題是回調(diào)地獄。回調(diào)地獄是指,在使用回調(diào)函數(shù)處理異步操作時,由于多個異步操作的嵌套和依賴關(guān)系,導(dǎo)致代碼結(jié)構(gòu)變得混亂和難以維護的情況。在Java中,我們可以通過創(chuàng)建線程和設(shè)置各線程優(yōu)先級的方式,將原本的異步過程調(diào)整為線性的同步過程。而在TypeScript中,除了傳統(tǒng)的設(shè)置線程的方法之外,我們還可以通過Promise或async/await來避免回調(diào)地獄,使代碼更加清晰和易于理解。

在上述代碼中,筆者聲明了兩個異步函數(shù),分別是Node1_Get_Geographical_Position與Node2_Get_City_Name,不妨稱它們?yōu)榻Y(jié)點函數(shù)。其中,第一個結(jié)點函數(shù)用于獲取地理位置信息(包含坐標信息),第二個結(jié)點函數(shù)用于將所獲取的地理坐標信息轉(zhuǎn)換為地理描述,并且,它們在時間維度上有一個執(zhí)行次序,即先執(zhí)行第一個結(jié)點函數(shù),當(dāng)其執(zhí)行完成并返回相關(guān)結(jié)果后,再執(zhí)行第二個結(jié)點函數(shù)。顯然,第二個結(jié)點函數(shù)的輸入即為第一個結(jié)點函數(shù)的輸出,而這也是先執(zhí)行第一個結(jié)點函數(shù)的原因。

要讓兩個異步的結(jié)點函數(shù)按次序線性執(zhí)行,我們可以定義一個新的異步函數(shù)Get_Geo_Data,在其函數(shù)體內(nèi)添加合適的操作語句以調(diào)用這兩個結(jié)點函數(shù)。在上述代碼中,Get_Geo_Data首先需判定相關(guān)的位置權(quán)限是否已被提供,接著調(diào)用第一個結(jié)點函數(shù)Node1_Get_Geographical_Position,并在調(diào)用時增加了關(guān)鍵字await。這意味著,在Node1_Get_Geographical_Position返回結(jié)果之前,Get_Geo_Data函數(shù)體中剩下的未執(zhí)行的操作語句是不會被執(zhí)行的。當(dāng)?shù)谝粋€結(jié)點函數(shù)執(zhí)行結(jié)束后,Get_Geo_Data再調(diào)用第二個結(jié)點函數(shù)Node2_Get_City_Name,同樣地,要添加關(guān)鍵字await,否則在第二個結(jié)點函數(shù)成功響應(yīng)前,Get_Geo_Data就已經(jīng)跑完了,這樣什么都不會被輸出。

接下來,筆者將討論兩個結(jié)點函數(shù)各自的代碼邏輯。

對于第一個結(jié)點函數(shù)Node1_Get_Geographical_Position,首先它預(yù)定義了需要輸出的變量output(對應(yīng)一個Object型數(shù)據(jù)),其包含7個不同的鍵值對。接著,檢查定位功能是否可用,若可用,則通過導(dǎo)入的系統(tǒng)模塊geoLocationManager的getCurrentLocation方法異步獲取設(shè)備的地理位置信息,并在then()中提取地理位置信息中所攜帶的經(jīng)度,緯度,海拔高度,和實時速度。最后,輸出變量output。

至于第二個結(jié)點函數(shù)Node2_Get_City_Name,首先它預(yù)定義了需要輸出的變量output,并且將傳入的參數(shù)input(即Node1_Get_Geographical_Position的輸出)的一些鍵對應(yīng)的值拷貝到output中。之后, 判斷逆地理編碼轉(zhuǎn)換功能是否可用,若可用,則通過geoLocationManager的getAddressesFromLocation方法異步獲取設(shè)備所在位置的地理描述信息(即國家,城市等),并在then()中提取地理描述信息中的城市名。最后,輸出變量output。

完成功能集成工作后,我們在Index.ets中調(diào)用此模塊。

......
//導(dǎo)入獲取設(shè)備地理信息的模塊
import { Get_Geo_Data } from 'ets/Service/Geo'

@Entry
@Component
struct Index {

    ......

  //編寫異步方法,調(diào)用之前已寫好的模塊文件Geo
  async update_geo_data(){

    //判斷是否獲取所需權(quán)限
    if(!this.ifAccessible){
      this.dialogController_Inaccessible.open()
      return
    }

    let info = await Get_Geo_Data()

    this.Geo_Info = '       ---地理信息---\n' + '\n當(dāng)前所在城市:' + info.cityName + '\n緯度: ' + info.position_x + '\n經(jīng)度: ' + info.position_y + '\n海拔: ' + info.position_z + '\n速度: ' + info.speed + ' m/s\n'
    if(!info.isFinished) this.Geo_Info += '\n錯誤信息: ' + info.error

  }

  build() {
    Column({space:10}) {
                .....

        Column(){

            ......

          Button('獲取地理位置')
            .width('90%')
            .fontSize(18)
            .backgroundColor(Color.Pink)
            .margin({
              top:14
            })
            //調(diào)用異步方法update_geo_data
            .onClick(()=>{
              this.update_geo_data()
            })

        }
        .height('100%')
        .layoutWeight(4)
        .backgroundColor(Color.White)

      }
      .height('11%')
      .width('92%')

            ......

  }

}

......

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

Demo完成之后,我們需要用模擬機或真機來運行以查看效果。

可惜的是,模擬機里的逆地理編碼轉(zhuǎn)換服務(wù)是不可用的,所以其無法得到設(shè)備所在地的地理描述,因而無法輸出城市名。

相關(guān)日志如下,可見,逆地理編碼轉(zhuǎn)換服務(wù)被檢查為不可用。

如果在真機上運行,逆地理編碼轉(zhuǎn)換服務(wù)是沒什么問題的。下圖是筆者借用了roommate的真機后得到的程序運行截圖。

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

2023-10-27 16:12:29

2023-11-30 08:06:43

Springboot地理位置

2023-09-13 16:38:09

Geo數(shù)據(jù)類型Redis

2013-11-15 15:46:16

Nagios地圖

2023-08-25 13:23:15

2012-02-14 16:51:07

HTML 5

2020-06-12 16:13:23

物聯(lián)網(wǎng)設(shè)備地理位置物聯(lián)網(wǎng)

2013-07-16 11:16:03

云計算

2011-11-18 09:28:17

地理位置API

2012-02-26 21:41:46

手機黑客

2011-09-13 16:24:11

PhoneGap AP

2013-01-25 15:03:27

LBALBS移動廣告

2014-06-20 16:58:14

天下游修改工具Android

2012-02-02 14:25:14

LBS游戲地理位置

2011-06-30 09:07:22

Gartner云計算

2011-04-27 15:32:27

用戶地理位置信息蘋果谷歌

2009-11-20 09:25:50

TwitterAPI

2021-04-18 16:34:13

PythonAPI接口

2011-04-27 09:58:56

Windows PhoLBS微軟

2011-05-03 15:55:50

地理位置服務(wù)LBS簽到
點贊
收藏

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

日韩免费毛片视频| 久久久久se| 久久影院一区二区| 亚洲69av| 欧美日韩欧美一区二区| 狠狠精品干练久久久无码中文字幕| 日本韩国在线观看| 免费不卡在线视频| 欧美极品美女视频网站在线观看免费| 久久午夜夜伦鲁鲁片| 成人午夜精品| 亚洲国产精品一区二区久久恐怖片| 日本一区高清在线视频| 国产男男gay网站| 国产亚洲精品bv在线观看| 久久精品一本久久99精品| 久久人妻少妇嫩草av无码专区| 成人在线视频免费| 精品国产乱码久久久久久天美| 日韩精品极品视频在线观看免费| 国产99久久九九精品无码免费| 久久久久久黄| 97视频在线观看视频免费视频| 国产18无套直看片| 青青操综合网| 日韩精品一区二区三区视频播放| 日日躁夜夜躁aaaabbbb| 性欧美xxx69hd高清| 一区二区三区四区蜜桃| 亚洲一区三区在线观看| 国产一级片在线| 99久久久精品免费观看国产蜜| 成人黄色av网| 国产精品成人久久久| 一区二区三区导航| 欧美精品精品精品精品免费| 性欧美videos| 久久久国产精品| 最近2019中文字幕在线高清 | 国产精品99久久久久久久vr | 亚洲国产成人精品无码区99| 免费黄色网页在线观看| 国产日韩欧美在线一区| 久久久一本精品99久久精品| 色一情一乱一区二区三区| 国产成人福利片| 99久久99| 性欧美8khd高清极品| 国内外成人在线| 成人黄色av播放免费| 一级黄色小视频| 久久99在线观看| 成人久久18免费网站图片| 在线免费观看中文字幕| 日本不卡一区二区三区| 国产精品久久久久免费a∨大胸 | 91香蕉视频网| 人人狠狠综合久久亚洲婷| 国产一区二区三区网站| x88av在线| 色婷婷色综合| 久久久精品久久久| www.毛片com| 欧美日韩视频一区二区三区| 久久人人爽国产| 天天操天天干视频| 久久国产高清| 国产精品激情av电影在线观看| 日批视频免费观看| 另类小说欧美激情| 91免费在线观看网站| 亚洲精品国产精品国| 成人av午夜影院| 欧美成人综合一区| 色欧美激情视频在线| 亚洲三级电影全部在线观看高清| 轻点好疼好大好爽视频| 日韩伦理在线一区| 欧美日韩一二三| 欧美人与性动交α欧美精品| 国产成人aa在线观看网站站| 精品视频久久久久久久| 久久亚洲无码视频| 综合激情婷婷| 57pao精品| 中文字幕在线网站| 国产精品99久久久| 欧美精品在线一区| 黄色网址在线免费| 欧美日韩国内自拍| 尤物国产在线观看| www.国产精品一区| 亚洲天堂网在线观看| 日韩欧美国产成人精品免费| 亚洲国产精品一区| 国产精品久久久一区| 午夜久久久久久噜噜噜噜| 久久色在线观看| 中国黄色录像片| 在线观看网站免费入口在线观看国内| 欧美日韩黄视频| 日本不卡视频一区| 欧美1级片网站| 欧美在线亚洲一区| va婷婷在线免费观看| 国产午夜精品福利| 久久综合久久网| 四虎在线精品| 亚洲精品少妇网址| 视频这里只有精品| 日日噜噜夜夜狠狠视频欧美人| 91|九色|视频| 91网页在线观看| 欧美日韩黄色大片| 亚洲精品久久一区二区三区777| 精品国产一区二区三区香蕉沈先生 | 欧美日韩黄色影视| 男生草女生视频| 亚洲国产99| 91天堂在线观看| jizzjizz在线观看| 日韩欧美国产网站| 理论片大全免费理伦片| 91成人国产| 国产精品美女午夜av| 午夜国产在线视频| 亚洲一级二级在线| 一级片免费在线观看视频| 日韩欧美一区二区三区免费看| 国产69久久精品成人| 亚洲老妇色熟女老太| ...中文天堂在线一区| 999在线免费视频| 九九精品在线| 国产91精品久久久久久| 欧美一级一区二区三区| 亚洲综合视频在线观看| 男男受被啪到高潮自述| 天天射—综合中文网| 国产精品视频资源| 成黄免费在线| 欧美色中文字幕| 久久精品三级视频| 欧美aaaaaa午夜精品| 天堂一区二区三区| 蜜桃视频成人m3u8| 中文字幕一区二区三区电影| 中文字幕日韩三级| 中文字幕制服丝袜成人av | 一区二区三区亚洲| 亚洲av无码不卡| 国产人伦精品一区二区| 妺妺窝人体色www在线观看| 国产乱码精品一区二区亚洲| 国产成人极品视频| av亚洲在线| 欧美日韩你懂的| 精品国产乱码久久久久久鸭王1| 国产自产高清不卡| 人妻激情另类乱人伦人妻| 9l视频自拍九色9l视频成人| 午夜精品久久久久久99热软件| 少妇人妻偷人精品一区二区| 欧美午夜精品在线| 欧美激情亚洲色图| 久久97超碰色| 日韩激情视频一区二区| 日本成人中文| 国产mv免费观看入口亚洲| 国产51人人成人人人人爽色哟哟| 欧美一a一片一级一片| 成人做爰视频网站| 国产精品99久久久久久似苏梦涵| 免费无码毛片一区二三区| 欧美人妖在线| 成人免费自拍视频| missav|免费高清av在线看| 亚洲精品综合精品自拍| 国产精品无码一区| 依依成人精品视频| 双性尿奴穿贞c带憋尿| 毛片av一区二区| 18禁裸男晨勃露j毛免费观看| 欧美电影免费网站| 国产日韩精品在线播放| 久久www人成免费看片中文| 日韩精品在线影院| 国产精品久久久久久免费播放| 亚洲一区二区在线免费看| 中文字幕第4页| 国产精品一品视频| 国产xxxxx在线观看| 亚洲精品电影| 欧美精品亚洲精品| 一区中文字幕| 国产精品日韩在线一区| tube8在线hd| 精品激情国产视频| 亚洲人成色777777老人头| 欧美美女bb生活片| 欧美三级一区二区三区| 亚洲丝袜自拍清纯另类| 加勒比精品视频| 韩国理伦片一区二区三区在线播放 | 欧美日韩视频在线第一区 | 99riav1国产精品视频| 亚洲国产欧美不卡在线观看 | 国产一级二级三级| 国产色产综合产在线视频| 国产伦理在线观看| 老司机精品视频在线| 无码精品a∨在线观看中文| 亚欧美无遮挡hd高清在线视频 | 日本韩国欧美国产| 国产五月天婷婷| 亚洲精品中文在线观看| 欧美日韩生活片| 91一区二区三区在线播放| 伦伦影院午夜理论片| 日本特黄久久久高潮| 成年人网站免费视频| 欧美在线免费| 亚洲人成网站在线播放2019| 夜色77av精品影院| 久久国产一区二区| 精品人人人人| 国产精品v欧美精品∨日韩| 亚洲色图综合| 国产精品视频在线播放| 久久亚洲精品爱爱| 3344国产精品免费看| av成人福利| 欧美黄色小视频| 午夜成年人在线免费视频| 久久精品视频在线| www在线视频| 久久久91精品国产一区不卡| 91在线导航| www.久久色.com| 夜级特黄日本大片_在线 | 在线观看亚洲大片短视频| 91免费视频大全| 黄色在线观看av| 337p粉嫩大胆噜噜噜噜噜91av| 中国特级黄色大片| 不卡一区中文字幕| v天堂中文在线| 99久久精品免费精品国产| 亚洲女则毛耸耸bbw| 国产91丝袜在线观看| 日本成人在线免费| 国产69精品久久久久毛片| 精品国产一二区| 成人美女在线观看| 国产xxxxxxxxx| www国产成人免费观看视频 深夜成人网 | 黑人一区二区三区| 成人福利免费观看| 精品国产亚洲一区二区三区在线| 91亚洲一区精品| 亚洲国产欧美在线观看| 国产精品三区四区| 日韩av网址大全| 日韩国产美国| 五月天久久网站| 欧美一区二区视频在线播放| 亚洲区国产区| 日日碰狠狠躁久久躁婷婷| 免费观看在线综合| 丰满饥渴老女人hd| 99久久精品99国产精品| 91精品国自产在线| 亚洲男人电影天堂| 日本一级淫片色费放| 日韩欧美精品网站| 91麻豆成人精品国产| 欧美mv和日韩mv的网站| 飘雪影院手机免费高清版在线观看| 亚洲性日韩精品一区二区| 麻豆影视国产在线观看| 欧美激情18p| 综合日韩av| 91精品一区二区| 欧美久久香蕉| 伊人久久大香线蕉av一区| 国模一区二区三区| 国产性生交xxxxx免费| 国产成人在线免费| 色噜噜在线观看| 一区在线中文字幕| 国产精品男女视频| 欧美一二三区在线观看| 日本大片在线观看| 欧美精品亚州精品| 欧美成人精品三级网站| 99国产超薄丝袜足j在线观看 | 中文字幕久久久av一区| wwww亚洲| 成人国产精品久久久| 性欧美xxxx免费岛国不卡电影| 中文字幕欧美日韩一区二区| 亚洲黄色影片| 天天做天天干天天操| 91免费观看在线| 精国产品一区二区三区a片| 91豆麻精品91久久久久久| 乱色精品无码一区二区国产盗| 在线观看欧美日韩国产| xxxx另类黑人| 91丝袜脚交足在线播放| 日韩av二区| 男女av免费观看| 成人sese在线| 欧美久久久久久久久久久久| 欧美视频在线观看一区二区| 亚州男人的天堂| 欧美激情精品久久久久久久变态| 电影一区二区| 欧美国产一区二区在线| 亚洲三级国产| 精品人妻人人做人人爽夜夜爽| 国产精品久久久久影院色老大| 国产精品久久久久久久久久久久久久久久久| 欧美一区二区三区爱爱| 97最新国自产拍视频在线完整在线看| 97超级碰碰碰久久久| 国产精东传媒成人av电影| 最新av网址在线观看| 国产一区二区美女诱惑| 人妻无码一区二区三区免费| 91久久奴性调教| 国产三级视频在线| 青青草精品毛片| 奇米影视777在线欧美电影观看| 很污的网站在线观看| 国产高清亚洲一区| 加勒比婷婷色综合久久| 欧美精品粉嫩高潮一区二区| 尤物视频在线免费观看| 国产日韩欧美中文| 911久久香蕉国产线看观看| 午夜啪啪小视频| 亚洲欧洲美洲综合色网| 国产日韩一级片| 欧美大码xxxx| japanese色系久久精品| 免费av手机在线观看| 99riav一区二区三区| 国产成人无码一区二区三区在线| 亚洲精品一区二区在线观看| av第一福利在线导航| 久久99精品久久久久久秒播放器| 亚洲国产午夜| 黄色在线观看av| 在线观看91精品国产入口| 波多野结衣在线网站| 国产综合香蕉五月婷在线| 婷婷综合视频| wwwww在线观看| 亚洲国产精品视频| 免费在线黄色网址| 国产精品男人爽免费视频1| 国产精品久久久久久久免费观看| 天堂网成人在线| 亚洲国产成人porn| 女人天堂在线| 成人午夜小视频| 1024成人| 亚洲精品国产精品国自| 欧美一级日韩不卡播放免费| 国产啊啊啊视频在线观看| 久久亚洲高清| 美腿丝袜在线亚洲一区| 91porn在线视频| 日韩av综合中文字幕| 91在线亚洲| 丁香色欲久久久久久综合网| 91美女蜜桃在线| 一区二区不卡视频在线观看| 欧美另类高清videos| 西野翔中文久久精品字幕| 超碰超碰在线观看| 夜色激情一区二区| 九色视频网站在线观看| 91影院在线免费观看视频| 一区二区三区福利| 51精品免费网站| 亚洲精品久久久久久久久久久久 | 久久国产精品99精品国产| 免费看一级一片| 亚洲天堂第一页| 中文久久电影小说| 男人插女人下面免费视频| 一区二区三区中文字幕精品精品 | 在线观看av免费观看| 天天影视网天天综合色在线播放| 9色在线视频网站| 狠狠干一区二区| 国产精品99久| 中文字幕+乱码+中文|