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

獲取設備的地理位置

系統 OpenHarmony
本期筆者將以一個Demo為例,幫助有需要的HarmonyOS開發者實現獲取設備地理位置的功能。

想了解更多關于開源的內容,請訪問:

51CTO 開源基礎軟件社區

https://ost.51cto.com

前言

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

本期筆者將以一個Demo為例,幫助有需要的HarmonyOS開發者實現獲取設備地理位置的功能。

正文

創建工程

打開DevEco Studio(開發工具的版本必須支持API9),創建一個新的project,相關勾選如下

UI設計

導入圖片資源

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

添加UI描述

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

@Entry
@Component
struct Index {

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

  @State Geo_Info:string = ''

	//用于存儲用戶是否授權的狀態信息
  @State ifAccessible:boolean = false
  
   //new兩個彈窗控制器
  private dialogController_Accessible : CustomDialogController = new CustomDialogController({
    builder:dialog({
      message:'已獲取權限'
    })
  })

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


  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('獲取相關權限')
            .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設計后,可以打開預覽器查看界面效果:

集成功能模塊

向用戶動態申請授權的基礎功能模塊

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

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

之后,我們在Index.ets中對其進行調用。

//導入common
import common from '@ohos.app.ability.common'
//導入向用戶發起權限申請的模塊
import Request_Permission_From_Users from 'ets/Service/Applicant'

@Entry
@Component
struct Index {

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

  //編寫異步方法,調用之前已寫好的模塊文件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('獲取相關權限')
            .width('90%')
            .fontSize(18)
            .backgroundColor(Color.Pink)
            //調用異步方法apply
            .onClick(()=>{
              this.apply()
            })

        	......

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

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

	......

  }

}

......

獲取設備地理信息的功能模塊

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

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

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

//導入位置服務模塊
import geoLocationManager from '@ohos.geoLocationManager';

//導入自定義的權限檢查模塊
import Check_Access from 'ets/Service/Detector'

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

/*
 *結點函數1:獲取用戶設備當前所處位置的經度和緯度數據
 */
async function Node1_Get_Geographical_Position(){

  //預定義返回值
  let output = {
    'position_x':null,
    'position_y':null,
    'position_z':null,
    'cityName':' 未知',
    'speed':null,
    //結點函數的執行狀態,默認為失敗
    'isFinished':false,
    'error':'無'
  }

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

  //定義需要輸入的請求參數
  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

    //結點函數的執行狀態修改為成功
    output.isFinished = true

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

  return output

}

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

  //預定義返回值
  let output = {
    'cityName': ' 未知',
    'position_x':input.position_x,
    'position_y':input.position_y,
    'position_z':input.position_z,
    'speed':input.speed,
    //結點函數的執行狀態,默認為失敗
    'isFinished': false,
    'error':'無'
  }


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

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

  //等待模塊完成逆地理編碼轉換的異步操作
  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

    //結點函數的執行狀態修改為成功
    output.isFinished = true

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

  return output

}

//導出可供調用的接口
export async function Get_Geo_Data(){

  //模塊結點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':'設備未獲取相關權限'
    }
  }

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


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

}

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

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

要讓兩個異步的結點函數按次序線性執行,我們可以定義一個新的異步函數Get_Geo_Data,在其函數體內添加合適的操作語句以調用這兩個結點函數。在上述代碼中,Get_Geo_Data首先需判定相關的位置權限是否已被提供,接著調用第一個結點函數Node1_Get_Geographical_Position,并在調用時增加了關鍵字await。這意味著,在

Node1_Get_Geographical_Position返回結果之前,Get_Geo_Data函數體中剩下的未執行的操作語句是不會被執行的。當第一個結點函數執行結束后,Get_Geo_Data再調用第二個結點函數Node2_Get_City_Name,同樣地,要添加關鍵字await,否則在第二個結點函數成功響應前,Get_Geo_Data就已經跑完了,這樣什么都不會被輸出。

接下來,筆者將討論兩個結點函數各自的代碼邏輯。

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

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

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

......
//導入獲取設備地理信息的模塊
import { Get_Geo_Data } from 'ets/Service/Geo'

@Entry
@Component
struct Index {

	......

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

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

    let info = await Get_Geo_Data()

    this.Geo_Info = '       ---地理信息---\n' + '\n當前所在城市:' + info.cityName + '\n緯度: ' + info.position_x + '\n經度: ' + 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
            })
            //調用異步方法update_geo_data
            .onClick(()=>{
              this.update_geo_data()
            })

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

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

			......

  }

}

......

真機&模擬機調試

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

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

相關日志如下,可見,逆地理編碼轉換服務被檢查為不可用。

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

文章相關附件可以點擊下面的原文鏈接前往下載:

https://ost.51cto.com/resource/3053

想了解更多關于開源的內容,請訪問:

51CTO 開源基礎軟件社區

https://ost.51cto.com

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區
相關推薦

2024-07-09 08:37:13

2020-06-12 16:13:23

物聯網設備地理位置物聯網

2013-11-15 15:46:16

Nagios地圖

2023-08-25 13:23:15

2011-11-18 09:28:17

地理位置API

2012-02-14 16:51:07

HTML 5

2013-07-16 11:16:03

云計算

2023-11-30 08:06:43

Springboot地理位置

2012-02-26 21:41:46

手機黑客

2011-09-13 16:24:11

PhoneGap AP

2013-01-25 15:03:27

LBALBS移動廣告

2012-02-02 14:25:14

LBS游戲地理位置

2023-09-13 16:38:09

Geo數據類型Redis

2014-06-20 16:58:14

天下游修改工具Android

2011-04-27 15:32:27

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

2011-06-30 09:07:22

Gartner云計算

2009-11-20 09:25:50

TwitterAPI

2011-05-03 15:55:50

地理位置服務LBS簽到

2020-06-07 21:56:26

增強現實AR導航

2012-09-04 10:15:00

IBMdw
點贊
收藏

51CTO技術棧公眾號

欧美 日韩 国产 高清| 国产成人在线一区| 欧美一级xxxx| 免费人成在线观看播放视频| 日韩国产欧美在线观看| 在线中文字幕日韩| 怡红院亚洲色图| av网站在线看| 成人av电影在线| 国产成人精品久久| 特一级黄色录像| 成人盗摄视频| 欧美性大战久久久| 国产小视频免费| 毛片免费在线| 国产一区不卡精品| 日韩在线观看免费全集电视剧网站| 中文字幕12页| 高清视频在线观看三级| 国产日产欧美精品一区二区三区| 成人免费视频a| 好吊操这里只有精品| 免费a在线观看| 免费看欧美女人艹b| 欧美老妇交乱视频| 素人fc2av清纯18岁| 一个人看的www视频在线免费观看 一个人www视频在线免费观看 | 欧美成人中文| 亚洲人线精品午夜| 中国老熟女重囗味hdxx| 国产精品一区二区av影院萌芽| 老司机免费视频一区二区三区| 欧美成人免费大片| 91视频在线网站| 中文在线综合| 精品视频在线免费看| 无罩大乳的熟妇正在播放| 毛片在线看片| 国产亲近乱来精品视频| 国产在线播放一区二区| 国产精品九九九九| 亚洲欧美久久久| 欧美激情精品久久久久久变态| 免费黄在线观看| 免费观看成人www动漫视频| 欧美一区二区三区性视频| 欧美xxxxx在线视频| 免费av不卡在线观看| 中文av一区特黄| 欧美日韩成人一区二区三区 | 新91视频在线观看| 国产福利一区二区精品秒拍| 欧美一级片在线看| 男女爽爽爽视频| 电影一区二区三区| 午夜精品成人在线| 日韩欧美视频免费在线观看| 精品国产丝袜高跟鞋| 国产欧美视频一区二区| 久久成人资源| 女人18毛片一区二区三区| 国产成人免费视频网站| 亚洲一区二区三区香蕉| 在线观看免费视频a| 丝袜美腿高跟呻吟高潮一区| 5252色成人免费视频| 黄色av免费播放| 欧洲杯半决赛直播| 国产一区二区三区高清在线观看| 熟女少妇一区二区三区| 网曝91综合精品门事件在线| 亚洲精品久久在线| 亚洲中文字幕一区| 琪琪久久久久日韩精品| 日韩黄色av网站| 中文文字幕文字幕高清| 凹凸成人在线| 亚洲国产99精品国自产| 美女搡bbb又爽又猛又黄www| 成人爽a毛片| 日韩成人网免费视频| 中出视频在线观看| 国产成人精品免费视| 亚洲国产精品热久久| 超碰男人的天堂| 一区三区在线欧| 亚洲三级免费看| 快灬快灬一下爽蜜桃在线观看| 国产亚洲欧美日韩在线观看一区二区 | 三区精品视频| 快射视频在线观看| 一区二区三区蜜桃网| 国产精品第157页| 9i看片成人免费高清| 91激情在线视频| 欧美一级xxxx| 一区二区日韩| 亚洲欧洲日产国码av系列天堂| 成都免费高清电影| 欧美大人香蕉在线| 久久91精品国产| 国产一级片毛片| 蜜桃91丨九色丨蝌蚪91桃色| 亚洲综合中文字幕在线观看| 天天操天天爱天天干| 久久久久国产精品麻豆ai换脸| 亚洲国产一区二区三区在线| v天堂福利视频在线观看| 亚洲午夜精品在线| 日韩在线第三页| 一区二区三区欧洲区| 亚洲人成在线观| 婷婷久久综合网| 日韩视频三区| 国产日韩欧美视频| 婷婷丁香花五月天| 中文字幕在线一区免费| 男人插女人视频在线观看| 亚洲a∨精品一区二区三区导航| 欧美福利视频导航| 欧美色图亚洲激情| 亚洲女同另类| 日本精品一区二区三区在线| 91在线视频国产| 91在线观看地址| 久久久一二三四| 日韩大片欧美大片| 欧美成人高清电影在线| 丁香激情五月少妇| 亚洲毛片在线| 91麻豆国产精品| 可以在线观看的av网站| 亚洲香肠在线观看| 国产女同无遮挡互慰高潮91| 免费久久久久久久久| 欧美激情视频一区| 国产乱淫片视频| 99re成人精品视频| 男人天堂a在线| 欧美xxxx性| 亚洲欧美成人一区二区在线电影| 日本午夜在线观看| 丝袜a∨在线一区二区三区不卡 | 9i精品福利一区二区三区| 国产一区二区不卡| 亚洲欧洲在线一区| 成人免费网站www网站高清| 亚洲第一精品久久忘忧草社区| 在线观看亚洲网站| 日本不卡免费在线视频| 人禽交欧美网站免费| 免费高潮视频95在线观看网站| 日韩一区二区免费高清| 免费成人深夜夜行网站| 日韩电影在线观看电影| 欧美精品一区二区三区在线看午夜 | 91精品国产自产在线观看永久| 欧洲成人一区二区三区| 亚洲精品国产一区二区精华液| 校园春色 亚洲色图| 日韩欧美一区二区三区在线视频 | 精品中文字幕视频| 午夜精品在线播放| 五月天久久比比资源色| 精品人妻一区二区三区香蕉 | 亚洲一区免费观看| 捆绑裸体绳奴bdsm亚洲| 石原莉奈在线亚洲二区| 亚洲一区三区| 在线精品视频一区| 欧美一级免费看| 在线观看二区| 日韩一二三区视频| 日韩欧美激情视频| 国产亚洲一二三区| 亚洲免费黄色录像| 在线欧美不卡| 欧洲一区二区在线| 国产95亚洲| 97精品伊人久久久大香线蕉| 国产资源在线观看| 91麻豆精品久久久久蜜臀| 国产一级中文字幕| 日本一区二区不卡视频| 欧美日韩理论片| 国产欧美成人| 色中文字幕在线观看| 福利电影一区| 国产欧美一区二区白浆黑人| 蜜臀av在线| 综合136福利视频在线| 超碰在线播放97| 91精品91久久久中77777| 国产盗摄一区二区三区在线| 91麻豆高清视频| 特级黄色片视频| 日韩国产精品久久久久久亚洲| 91精品一区二区三区四区| 亚洲深夜福利在线观看| 97久久夜色精品国产九色 | 在线观看日产精品| 免费看一级一片| 欧美激情一区不卡| 日韩无码精品一区二区| 精品亚洲成a人在线观看| 日韩av在线第一页| 国产一区视频在线观看免费| 亚洲国产日韩综合一区| 欧美激情极品| 成人av网站观看| 外国成人毛片| 国产精品久久久久国产a级| 波多野结衣中文字幕久久| 日韩中文字幕在线免费观看| 欧美女优在线| 亚洲第一网中文字幕| 国产精品一区二区人人爽| 日本韩国欧美在线| 久久99精品波多结衣一区| 一区二区三区四区乱视频| 免费黄色国产视频| 久久亚洲欧美国产精品乐播| 影音先锋资源av| 国产在线精品免费| 午夜免费福利视频在线观看| 日韩高清中文字幕一区| 精品这里只有精品| 国内久久视频| 国产高清不卡无码视频| 性xxxx欧美老肥妇牲乱| 亚洲人成人77777线观看| 深爱激情综合| 日本一区二区免费看| 偷拍一区二区| 免费看成人片| 美女少妇全过程你懂的久久| 久久国产精品精品国产色婷婷| 国产精品网址| 国产亚洲自拍偷拍| 久久久伦理片| 精品午夜一区二区三区| 精品素人av| 精品人伦一区二区三区| 精品久久97| 久99久在线| 久久综合色占| 日韩欧美亚洲v片| 成人精品影院| 国产精品av免费| 欧美日韩一卡| 国产3p露脸普通话对白| 亚洲综合欧美| 日韩精品免费播放| 蜜桃免费网站一区二区三区| 五月天婷婷亚洲| 国产精品一区二区三区四区 | 国产日本欧美一区二区| 色欲狠狠躁天天躁无码中文字幕 | 粉嫩av一区二区三区| 涩视频在线观看| av不卡一区二区三区| 亚洲AV无码国产精品| 久久久精品国产免费观看同学| 一级肉体全黄裸片| 日韩一区在线播放| 三级影片在线看| 亚洲国产日韩av| 伦av综合一区| 制服丝袜亚洲色图| 亚洲大尺度网站| 日韩精品中文字幕视频在线| 国产高清视频免费最新在线| 日韩视频一区在线| 欧美1—12sexvideos| 欧美孕妇孕交黑巨大网站| 久久久人成影片一区二区三区在哪下载| 国产美女久久精品| 99精品在免费线中文字幕网站一区 | 国产又爽又黄免费软件| 精品欧美乱码久久久久久1区2区| 五月天婷婷激情网| 最近中文字幕mv在线一区二区三区四区 | 26uuu色噜噜精品一区二区| 毛片视频免费播放| 亚洲一区二区三区视频在线播放| 欧美男人亚洲天堂| 日韩一级黄色大片| 九色视频成人自拍| 久久97精品久久久久久久不卡| 手机在线观看av| 成人欧美一区二区三区在线| 四虎5151久久欧美毛片| 亚洲人一区二区| 亚洲精选国产| 91小视频在线播放| 久久综合色天天久久综合图片| 日韩三级在线观看视频| 精品国产1区2区| 999久久久久久| 亚洲一区www| 波多野结衣在线高清| 91精品国产综合久久久久久久久 | 亚洲看片网站| 国产日韩免费| 天堂va欧美va亚洲va老司机| 国产精品丝袜黑色高跟| 日本五十路女优| 91精品国产综合久久久蜜臀图片| 好男人免费精品视频| 久久久久国产精品www| 日韩黄色三级| 日本一区二区不卡高清更新| 亚洲看片免费| 日本一区二区在线观看视频| 国产精品久久久久久户外露出| 免费黄色网址在线| 精品久久久久香蕉网| 国产原创在线观看| 国产精品免费小视频| 亚州国产精品| 国产精品又粗又长| 国产ts人妖一区二区| 天天看天天摸天天操| 欧美三区免费完整视频在线观看| 偷拍自拍在线| 91国产一区在线| 成人涩涩网站| 美脚丝袜脚交一区二区| 国产美女av一区二区三区| 2014亚洲天堂| 欧美日韩国产影片| 尤物网址在线观看| 国产精品自拍小视频| 日韩精品影视| 午夜激情在线观看视频| 国产丝袜欧美中文另类| √资源天堂中文在线| 国产手机视频精品| 末成年女av片一区二区下载| 国产美女精品久久久| 亚洲激情成人| av网页在线观看| 日韩欧美a级成人黄色| 三级在线观看| 国产精品96久久久久久| 国产精品午夜一区二区三区| 国产精品无码专区av在线播放| 99国产精品久久久久久久久久 | 国产私拍一区| a91a精品视频在线观看| 国产精品一级黄片| 色狠狠一区二区| 国产视频网址在线| 国产精品狼人色视频一区| 日韩成人精品一区| 亚洲高清视频免费| 亚洲精品国产一区二区精华液| 丰满人妻一区二区三区四区53| 久久久久久久久综合| 西野翔中文久久精品字幕| 久热免费在线观看| 国产精品第一页第二页第三页| 国产美女主播在线观看| 欧美极品第一页| 天天操综合520| 91亚洲免费视频| 亚洲免费观看高清| 手机av免费在线观看| 日韩美女免费线视频| 91麻豆精品国产91久久久平台| 免费成人黄色大片| 亚洲一区中文日韩| 日韩精品系列| 91精品国产综合久久香蕉922 | 欧美国产日韩视频| 日本一区福利在线| 亚洲精品自拍网| 亚洲在线观看免费| 黄色的视频在线免费观看| 国产有码在线一区二区视频| 欧美日韩1区| 精品成人av一区二区三区| 欧美区在线观看| 高清精品在线| 亚洲免费av网| 2欧美一区二区三区在线观看视频| 中文字幕资源网| 欧美精品18videosex性欧美| 欧美日韩激情在线一区二区三区| 少妇丰满尤物大尺度写真| 欧美色另类天堂2015| 国内外激情在线| 免费精品视频一区| 国产黑丝在线一区二区三区| 国产一区二区视频网站| 欧美日本亚洲视频| 青草国产精品| 粉嫩av懂色av蜜臀av分享| 3751色影院一区二区三区| 忘忧草在线影院两性视频|