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

學習服務卡片事件能力

系統 OpenHarmony
服務卡片和應用之間的消息傳遞是經常要用的功能,服務卡片的數據更新也是必不可少的,鴻蒙一共提供了三種方式,我們可以根據需要選擇合適的去使用,message方式是與FormExtensionAbility打交道,Router和call是與UIAbility打交道。

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

51CTO 開源基礎軟件社區

https://ost.51cto.com

簡要介紹

ArkTS卡片內部和提供方應用間的交互,可以通過在卡片一端調用postCardAction來實現,當前支持router、message和call三種類型的事件。我們根據實際應用分別從五個方面簡單學習一下:

  • 服務卡片通過router跳轉到應用指定頁面。
  • 服務卡片通過call調用應用頁面在后臺執行。
  • 應用通過message事件刷新服務卡片內容。
  • 應用通過router事件刷新服務卡片內容。
  • 應用通過call事件刷新服務卡片內容。

為了充分理解和使用這五種能力,我計劃新創建一個服務卡片,在上面放置5個按鈕分別實現對應的功能,同時放置一個文本組件,用于顯示事件刷新的結果。

  • 按鈕“主頁面”,點擊后直接跳轉到主頁面。
  • 按鈕“子頁面”,點擊后直接跳轉到子頁面。
  • 按鈕“message+1”,點擊后通過message方式刷新服務卡片,并使文本數值加一。
  • 按鈕“call+2”,點擊后通過call方式刷新服務卡片,并使文本數值加二。
  • 按鈕“router+3”,點擊后通過router方式刷新服務卡片,并使文本數值加三。

效果預覽

詳細介紹

1、跳轉到頁面

應用中一共有兩個頁面Index.ets與Second.ets,點擊卡片上相應的按鈕跳轉到對應界面,主要是通過調用postCardAction向指定UIAbility發送router事件,并在事件內定義需要傳遞的內容targetPage,該參數用來標識要打開的page頁面。

Button('主頁面', { type: ButtonType.Normal, stateEffect: true })
  .borderRadius(8)
  .margin(2)
  .onClick(() => {
    postCardAction(this, {
      'action': 'router',
      'abilityName': 'EntryAbility',
      'params': {
        'targetPage': 'index'
      }
    });
  })

Button('子頁面', { type: ButtonType.Normal, stateEffect: true })
  .borderRadius(8)
  .margin(1)
  .onClick(() => {
    postCardAction(this, {
      'action': 'router',
      'abilityName': 'EntryAbility',
      'params': {
        'targetPage': 'second'
      }
    });
  })

在EntryAbility.ts中接收router事件并獲取參數,根據傳遞的params不同,設置參數selectPage,在onWindowStageCreate函數中,根據傳入的不同值,通過windowStage.loadContent拉起不同的頁面。

onCreate(want, launchParam) {
  hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');

  if (want.parameters.params !== undefined) {
    let params = JSON.parse(want.parameters.params);
    console.info("onCreate router targetPage:" + params.targetPage);
    selectPage = params.targetPage;
  }
}
onNewWant(want, launchParam) {
  console.info("onNewWant want:" + JSON.stringify(want));
  if (want.parameters.params !== undefined) {
    let params = JSON.parse(want.parameters.params);
    console.info("onNewWant router targetPage:" + params.targetPage);
    selectPage = params.targetPage;
  }

  if (currentWindowStage != null) {
    this.onWindowStageCreate(currentWindowStage);
  }
}

onWindowStageCreate(windowStage: window.WindowStage) {
  // Main window is created, set main page for this ability
  hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');

  let targetPage;
  // 根據傳遞的targetPage不同,選擇拉起不同的頁面
  switch (selectPage) {
    case 'index':
      targetPage = 'pages/Index';
      break;
    case 'second':
      targetPage = 'pages/Second';
      break;
    default:
      targetPage = 'pages/Index';
  }
  if (currentWindowStage === null) {
    currentWindowStage = windowStage;
  }

  windowStage.loadContent(targetPage, (err, data) => {
    if (err.code) {
      hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
      return;
    }
    hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');
  });
}

2、調用應用到后臺

在卡片中使用postCardAction接口的call能力,能夠將卡片提供方應用的指定UIAbility拉到后臺。同時,call能力提供了調用應用指定方法、傳遞數據的功能,使應用在后臺運行時可以通過卡片上的按鈕執行不同的功能。
我們在這個示例中,通過postCardAction的call方式,調用EntryAbility中的funA方法,在funA方法具體實現函數funACall中,對傳遞的值進行加二操作。在EntryAbility中,funA方法也要進行注冊和注銷。
卡片中調用postCardAction方法時,action參數應指定為call,同時參數表中必須帶method參數。

Button('call+2', { type: ButtonType.Normal, stateEffect: true })
  .borderRadius(8)
  .margin(1)
  .onClick(() => {
    console.info('postCardAction to EntryAbility');
    postCardAction(this, {
      'action': 'call',
      'abilityName': 'EntryAbility', // 只能跳轉到當前應用下的UIAbility
      'params': {
        'method': 'funA',
        'formId': this.formId,
        'detail': this.detail
      }
    });
  })

UIAbility需要onCreate生命周期中打開監聽所需的方法,onDestroy生命周期中關閉監聽所需的方法。

const MSG_SEND_METHOD: string = 'funA'

onCreate(want, launchParam) {
  hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');

  try {
    // 監聽call事件所需的方法
    this.callee.on(MSG_SEND_METHOD, FunACall);
  } catch (error) {
    console.log(`${MSG_SEND_METHOD} register failed with error ${JSON.stringify(error)}`)
  }
}

onDestroy() {
  hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');

  try {
    this.callee.off(MSG_SEND_METHOD);
  } catch (error) {
    console.log(`${MSG_SEND_METHOD} register failed with error ${JSON.stringify(error)}`)
  }
}

在打開監聽時,需要指定具體的實現函數。

function FunACall(data) {
  // 獲取call事件中傳遞的所有參數
  let params = JSON.parse(data.readString())
  if (params.formId !== undefined) {
    let curFormId = params.formId;
    let message = params.detail;
    console.info(`UpdateForm formId: ${curFormId}, message: ${message}`);
    let formData = {
      "detail": (Number.parseInt(message) + 2).toString()
    };
    let formMsg = formBindingData.createFormBindingData(formData)
    formProvider.updateForm(curFormId, formMsg).then((data) => {
      console.info('updateForm success.' + JSON.stringify(data));
    }).catch((error) => {
      console.error('updateForm failed:' + JSON.stringify(error));
    })
  }
  return null;
}

這個功能通過call方式拉起指定UIAbility到后臺,隱式的執行計算操作,后面的通過call刷新卡片功能就會用到這個。

使用這個功能有兩點必須要注意:

  • 必須指定要拉起的UIAbility的launchType為singleton類型,否則無效。
  • 必須添加權限 ohos.permission.KEEP_BACKGROUND_RUNNING,否則也無效。

3、通過message刷新卡片

卡片頁面中可以通過postCardAction接口觸發message事件拉起FormExtensionAbility。
示例中,我們通過message的方式更新傳遞的值,并執行加一操作。

卡片中實現。

Button('message+1', { type: ButtonType.Normal, stateEffect: true })
  .borderRadius(8)
  .margin(1)
  .onClick(() => {
    console.info('postCardAction to EntryAbility');
    postCardAction(this, {
      'action': 'message',
      'params': {
        'detail': this.detail
      }
    });
  })

在FormExtensionAbility的onFormEvent生命周期中調用updateForm接口刷新卡片。

onFormEvent(formId, message) {
  // Called when a specified message event defined by the form provider is triggered.
  console.info(`FormAbility onEvent, formId = ${formId}, message: ${JSON.stringify(message)}`);

  let params = JSON.parse(message);
  let detail = '0'
  if (params.detail !== undefined) {
    detail = params.detail;
  }
  let formData = {
    'detail': (Number.parseInt(detail) + 1).toString()
  };
  let formInfo = formBindingData.createFormBindingData(formData)
  formProvider.updateForm(formId, formInfo).then((data) => {
    console.info('FormAbility updateForm success.' + JSON.stringify(data));
  }).catch((error) => {
    console.error('FormAbility updateForm failed: ' + JSON.stringify(error));
  })
}

4、通過router刷新卡片

卡片頁面中可以通過postCardAction接口觸發router事件拉起UIAbility,然后由UIAbility刷新卡片內容,此時會把page頁面調用到前臺。

示例中也是傳遞當前文本參數,然后打開新的頁面,同時會更新傳遞的值并加三操作,然后再formProvider.updateForm反饋給卡片頁面。

卡片中的實現:

Button('router+3', { type: ButtonType.Normal, stateEffect: true })
  .borderRadius(8)
  .margin(2)
  .onClick(() => {
    console.info('postCardAction to EntryAbility');
    postCardAction(this, {
      'action': 'router',
      'abilityName': 'EntryAbility',
      'params': {
        'detail': this.detail
      }
    });
  })

在UIAbility的onCreate()或者onNewWant()生命周期中可以通過入參want獲取傳遞過來的參數信息,然后調用updateForm接口刷新卡片。

onCreate(want, launchParam) {
  hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
  if (want.parameters[formInfo.FormParam.IDENTITY_KEY] !== undefined) {
    let curFormId = want.parameters[formInfo.FormParam.IDENTITY_KEY];
    // let detail = JSON.parse(want.parameters.params).detail;
    let detail = JSON.parse(want.parameters.params).detail;
    if (detail !== undefined) {
      console.info(`UpdateForm formId: ${curFormId}, message: ${detail}`);
      let formData = {
        "detail": (Number.parseInt(detail) + 3).toString()
      };
      let formMsg = formBindingData.createFormBindingData(formData)
      formProvider.updateForm(curFormId, formMsg).then((data) => {
        console.info('updateForm success.' + JSON.stringify(data));
      }).catch((error) => {
        console.error('updateForm failed:' + JSON.stringify(error));
      })
    }
  }

}

onNewWant(want, launchParam) {
  console.info("onNewWant want:" + JSON.stringify(want));

  if (want.parameters[formInfo.FormParam.IDENTITY_KEY] !== undefined) {
    let curFormId = want.parameters[formInfo.FormParam.IDENTITY_KEY];
    let detail = JSON.parse(want.parameters.params).detail;
    if (detail !== undefined) {
      console.info(`UpdateForm formId: ${curFormId}, message: ${detail}`);
      let formData = {
        "detail": (Number.parseInt(detail) + 3).toString()
      };
      let formMsg = formBindingData.createFormBindingData(formData)
      formProvider.updateForm(curFormId, formMsg).then((data) => {
        console.info('updateForm success.' + JSON.stringify(data));
      }).catch((error) => {
        console.error('updateForm failed:' + JSON.stringify(error));
      })
    }
  }
}

5、通過call刷新卡片

通過call刷新卡片和之前的調用應用到后臺方法類似,在調用后臺的基礎上加入了更新卡片的功能。

在使用postCardAction接口的call事件時,需要在FormExtensionAbility中的onAddForm生命周期回調中更新formId。

export default class EntryFormAbility extends FormExtensionAbility {
  onAddForm(want) {
    // Called to return a FormBindingData object.
    // let formData = {};
    // return formBindingData.createFormBindingData(formData);

    // let formId = want.parameters["ohos.extra.param.key.form_identity"];
    // let dataObj1 = {
    //   "formId": formId
    // };
    // let obj1 = formBindingData.createFormBindingData(dataObj1);
    // return obj1;

    let formId = want.parameters["ohos.extra.param.key.form_identity"];
    let formData = {
      "formId": formId
    };
    return formBindingData.createFormBindingData(formData);

  }
}

服務卡片中的按鈕就是之前的拉起后臺的按鈕,功能一樣。

Button('call+2', { type: ButtonType.Normal, stateEffect: true })
    .borderRadius(8)
    .margin(1)
    .onClick(() => {
      console.info('postCardAction to EntryAbility');
      postCardAction(this, {
        'action': 'call',
        'abilityName': 'EntryAbility', // 只能跳轉到當前應用下的UIAbility
        'params': {
          'method': 'funA',
          'formId': this.formId,
          'detail': this.detail
        }
      });
    })

具體實現是在UIAbility的onCreate生命周期中監聽call事件回調的方法funACall,對傳遞進來的值加二更新,然后調用updateForm接口刷新卡片。

function FunACall(data) {
  // 獲取call事件中傳遞的所有參數
  let params = JSON.parse(data.readString())
  if (params.formId !== undefined) {
    let curFormId = params.formId;
    let message = params.detail;
    console.info(`UpdateForm formId: ${curFormId}, message: ${message}`);
    let formData = {
      "detail": (Number.parseInt(message) + 2).toString()
    };
    let formMsg = formBindingData.createFormBindingData(formData)
    formProvider.updateForm(curFormId, formMsg).then((data) => {
      console.info('updateForm success.' + JSON.stringify(data));
    }).catch((error) => {
      console.error('updateForm failed:' + JSON.stringify(error));
    })
  }
  return null;
}

和之前一樣,要注意兩點,指定要拉起的UIAbility的launchType為singleton類型,添加權限 ohos.permission.KEEP_BACKGROUND_RUNNING,否則無效。

學習總結

服務卡片和應用之間的消息傳遞是經常要用的功能,服務卡片的數據更新也是必不可少的,鴻蒙一共提供了三種方式,我們可以根據需要選擇合適的去使用,message方式是與FormExtensionAbility打交道,router和call是與UIAbility打交道。支持call方式時一定不要忘了,在module.json5中設置launchType和ohos.permission.KEEP_BACKGROUND_RUNNING。

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

51CTO 開源基礎軟件社區

https://ost.51cto.com

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

2021-07-07 14:03:12

鴻蒙HarmonyOS應用

2020-02-19 10:39:44

機器學習云計算數據

2016-07-20 11:06:46

云計算

2021-07-20 09:58:16

鴻蒙HarmonyOS應用

2021-09-15 10:19:15

鴻蒙HarmonyOS應用

2020-09-18 10:06:39

AWS機器學習SageMaker

2015-04-14 09:20:02

云計算機器學習

2018-01-12 15:59:36

2017-10-31 10:11:04

深度學習服務器DeepLearnin

2021-07-22 08:45:47

鴻蒙HarmonyOS應用

2018-12-06 10:34:07

亞馬遜AWS機器學習

2022-01-19 14:30:51

鴻蒙應用服務卡片應用

2018-03-28 11:56:08

華為云

2018-02-08 11:13:34

華為云

2021-07-28 14:59:08

鴻蒙HarmonyOS應用

2021-12-24 15:54:23

華為

2022-04-24 15:26:38

服務卡鴻蒙

2020-08-23 10:45:05

深度學習人工智能技術

2017-02-23 15:13:08

2022-05-09 11:52:38

Java卡片服務卡片
點贊
收藏

51CTO技術棧公眾號

欧美一级黑人aaaaaaa做受| 欧美日本视频在线| 久久av免费观看| 成人毛片一区二区三区| 亚洲欧美色图| 国产视频自拍一区| 亚洲图片 自拍偷拍| 国产传媒在线| 国产精品第四页| 精品国产乱码久久久久久久软件 | 免费看的av网站| 午夜裸体女人视频网站在线观看| 国产精品久久久久7777按摩| 精品久久久久久一区| 一本到在线视频| 国产日本精品| 欧美剧在线观看| 中文字幕成人动漫| 国产伦精品一区二区三区在线播放| 日本高清免费不卡视频| 青青草国产免费| 黄色一级片在线观看| 久久九九99视频| 成人18视频| 国产精品九九九九| 日韩有码一区二区三区| 欧美精品videosex牲欧美| 日本污视频网站| 亚洲欧洲免费| 精品999在线播放| 伊人色在线视频| 美女18一级毛片一品久道久久综合| 一区二区三区不卡在线观看| 亚洲一区二区免费视频软件合集| 日本福利午夜视频在线| 成人毛片在线观看| 99国产超薄肉色丝袜交足的后果| 中文字幕人妻一区二区在线视频 | 香蕉成人伊视频在线观看| 国产又大又长又粗又黄| 色网站在线看| 中文字幕国产精品一区二区| 日韩国产高清一区| 毛片网站在线| 久久精品水蜜桃av综合天堂| 久久精品五月婷婷| 五月天婷婷视频| 成人国产在线观看| 国内精品二区| 午夜影院免费体验区| eeuss鲁片一区二区三区在线观看| 51午夜精品| www香蕉视频| 国产高清在线精品| www国产亚洲精品| 成人精品在线播放| www.66久久| 韩日午夜在线资源一区二区| 天天干天天草天天射| 成年人国产精品| 精品一区二区三区自拍图片区| 黑人操亚洲女人| 成人av一区二区三区| 韩国精品一区二区三区六区色诱| 天堂资源最新在线| 国产亚洲一区二区三区在线观看| 奇米影视首页 狠狠色丁香婷婷久久综合| 午夜视频免费在线| 日本一区二区三区在线不卡| 一本色道久久99精品综合| 国产精品久久久久久福利| 亚洲素人一区二区| 男人添女荫道口女人有什么感觉| 99爱在线观看| 色噜噜夜夜夜综合网| 成人性生交免费看| 日韩在线成人| 亚洲电影av在线| 国产精品密蕾丝袜| 亚洲a一区二区三区| 久久久久久美女| 日本黄色中文字幕| 国产在线麻豆精品观看| 精品乱子伦一区二区三区| 毛片在线播放网址| 亚洲精品中文在线观看| 国产a级一级片| 亚洲精品777| 日韩av影院在线观看| 538精品视频| 欧美日韩亚洲一区三区| 国产成人精品综合| 精品久久在线观看| 国产人成一区二区三区影院| 男人天堂成人网| 久久sese| 欧美岛国在线观看| 免费看黄色三级| 精品福利电影| 国产在线观看一区二区三区| 特黄视频在线观看| 一区精品在线播放| 国产肥臀一区二区福利视频| 日韩护士脚交太爽了| 日韩精品免费在线| 少妇人妻丰满做爰xxx| 久久久久久自在自线| 91手机在线播放| av在线电影观看| 婷婷综合五月天| 人妻精品久久久久中文字幕69| 国产精品羞羞答答在线观看| 欧美丰满少妇xxxxx| 中日韩av在线| 久久这里只精品最新地址| av动漫在线播放| 未满十八勿进黄网站一区不卡| 日韩的一区二区| 国产亚洲精品久久777777| 久久成人18免费观看| 久久精品日韩精品| sm久久捆绑调教精品一区| 91麻豆精品国产综合久久久久久 | 国产又猛又黄的视频| 国产美女撒尿一区二区| 欧美成人午夜影院| 国产精品玖玖玖| 日本一区二区不卡视频| 欧美日韩第二页| 欧洲亚洲视频| 国内精品美女av在线播放| 国产强伦人妻毛片| 国产精品国产自产拍在线| 日本一极黄色片| 网曝91综合精品门事件在线| 高清一区二区三区四区五区| 精品人妻久久久久一区二区三区 | 26uuu成人| 成人在线免费电影网站| 欲色天天网综合久久| 美女又爽又黄免费视频| 91免费看`日韩一区二区| 国产美女在线一区| 欧美色图婷婷| 国产91成人video| 天天操天天操天天操| 亚洲一区二区综合| 涩视频在线观看| 好吊视频一区二区三区四区| 亚洲自拍偷拍第一页| bestiality新另类大全| 日韩网站在线看片你懂的| 欧美成人免费观看视频| 国产成人精品综合在线观看| 久久人妻无码一区二区| 成人动漫视频| 97精品视频在线观看| 天堂av在线播放| 在线精品视频免费观看| 婷婷丁香综合网| 国产一区二区三区久久悠悠色av | 亚洲ⅴ国产v天堂a无码二区| 免费一级片91| 中文字幕中文字幕99 | 久久综合久久综合这里只有精品| 在线毛片观看| 一区二区三区日韩在线| 97人妻精品一区二区三区| 亚洲另类色综合网站| 亚洲中文字幕无码一区| 久久精品女人| 在线国产精品网| 日韩欧美一级| 亚州国产精品久久久| 你懂的视频在线播放| 欧美三级中文字幕在线观看| 国产精品视频一区二区三| av一二三不卡影片| 北条麻妃av高潮尖叫在线观看| 欧美r级电影| 国产99在线免费| 男人最爱成人网| 久久精品最新地址| 亚洲精品视频网| 在线观看一区日韩| 欧美日韩偷拍视频| 久久精品在线观看| 性鲍视频在线观看| 国产精品女主播一区二区三区| 亚洲精品乱码久久久久久蜜桃91| 日韩视频一二区| 热久久免费视频精品| av观看在线| 亚洲欧美福利视频| 性一交一乱一透一a级| 色拍拍在线精品视频8848| 国产日韩欧美在线观看视频| 92国产精品观看| 丰满人妻一区二区三区53视频| 午夜一区在线| 欧美 亚洲 视频| 日本久久精品| 久久99精品国产一区二区三区| www.精品国产| 日本欧美中文字幕| 亚洲精品白浆| 日韩视频在线免费观看| 日中文字幕在线| 精品少妇一区二区三区视频免付费 | 国产一区二区三区站长工具| 成人动漫视频在线观看免费| 一区在线影院| 奇门遁甲1982国语版免费观看高清 | 欧美日韩999| 日本精品在线| 亚洲视频在线免费看| 熟妇人妻中文av无码| 日韩欧美的一区二区| 一区二区美女视频| 在线观看网站黄不卡| 国产精品老女人| 亚洲国产另类av| 可以直接看的黄色网址| 国产精品久久久久永久免费观看 | 国产精品毛片一区二区三区四区| 精品日韩一区二区| 国产日韩欧美一区二区东京热 | 亚洲桃色在线一区| 992在线观看| 日本一区二区三区在线观看| 亚洲午夜福利在线观看| 99精品视频在线观看免费| 亚洲精品成人无码毛片| 国产综合一区二区| 亚洲视频第二页| 久久精品国产一区二区| 欧美特级aaa| 免费观看在线综合色| 妓院一钑片免看黄大片| 日韩高清在线电影| 中文字幕在线导航| 奇米一区二区三区av| 人人干人人视频| 日本欧美大码aⅴ在线播放| 国产免费人做人爱午夜视频| 国产一区二区你懂的| ww国产内射精品后入国产| 亚洲免费大片| 青青草原成人网| 日韩中文字幕不卡| 永久免费的av网站| 国产精品一二三区在线| 激情小说欧美色图| 99视频精品免费视频| 六十路息与子猛烈交尾| 久久久久成人黄色影片| 最新中文字幕av| 国产精品家庭影院| 久久久久久久久久网站| 亚洲妇熟xx妇色黄| 国产精品美女久久久久av爽| 欧美性xxxxxxx| 波多野结衣一区二区三区四区| 欧美色手机在线观看| 国产情侣一区二区| 亚洲国产欧美精品| 国产二区在线播放| 久久视频免费在线播放| 女囚岛在线观看| 情事1991在线| 男人天堂久久| 国产伦精品一区二区三| 嫩草一区二区三区| 一区二区不卡视频| 国产一区日韩一区| 免费观看成人在线视频| 精品一区二区三区久久久| 亚洲一区二区三区四区av| 久久久久成人黄色影片| av激情在线观看| 欧美小视频在线| av在线资源观看| 亚洲男人的天堂在线播放| 久草中文在线| 97超碰色婷婷| 91成人小视频| 久久综合给合久久狠狠色| 亚洲精品一区二区妖精| 波多野结衣乳巨码无在线| 久久国产福利国产秒拍| www.日本高清| 综合激情成人伊人| 亚洲天堂视频网站| 日韩一二在线观看| 国产黄在线看| 国产+成+人+亚洲欧洲| 少妇高潮一区二区三区99| 精品一区二区国产| 亚洲国产一成人久久精品| 精品www久久久久奶水| 国产成人在线免费| 91香蕉国产视频| 色老汉av一区二区三区| 亚洲奶汁xxxx哺乳期| 中文字幕亚洲欧美日韩2019| h片在线观看| 91视频8mav| 俺要去色综合狠狠| 国产免费毛卡片| 国产精品77777竹菊影视小说| 免费网站在线高清观看| 天天综合网天天综合色| 国产人妖一区二区三区| 中文字幕日韩电影| 香蕉视频亚洲一级| 国产午夜精品一区| 午夜精品久久久久99热蜜桃导演| 天堂av在线网站| 久久久一区二区三区| 日本中文字幕免费| 日韩欧美一区在线观看| 国产在线激情| 国产在线观看不卡| 三级电影一区| 午夜国产一区二区三区| 久久综合中文字幕| 男女视频免费看| 精品国产伦一区二区三区免费| 麻豆视频在线免费观看| 国产精品天天狠天天看| 欧洲杯足球赛直播| 亚洲少妇第一页| 国产欧美久久久精品影院| 国产一级片av| 国产一区二区三区久久精品| 久久青青视频| 日本高清一区| 日韩精品一级中文字幕精品视频免费观看| 99久久免费看精品国产一区| 亚洲国产视频直播| 色欲久久久天天天综合网 | 中文字幕欧美日韩一区二区三区 | 大地资源中文在线观看免费版| 66m—66摸成人免费视频| 日韩高清三区| 黄色片久久久久| 久久久久久久久岛国免费| 探花视频在线观看| 国产一区二区三区欧美| gogo亚洲高清大胆美女人体| 日本一区视频在线观看免费| 日日夜夜免费精品视频| www.日本高清视频| 欧美精品v国产精品v日韩精品 | 色呦色呦色精品| 国产精品短视频| 国内老熟妇对白hdxxxx| 欧美黄网免费在线观看| 好吊妞视频这里有精品| 黄色动漫网站入口| 中文字幕精品在线不卡| 99久久一区二区| 韩国v欧美v日本v亚洲| 中文字幕av一区二区三区人| 国产福利影院在线观看| 中文字幕一区二区三区不卡 | 成人国产精品| 精品国产无码在线| 成人性生交大合| 中文字幕精品无码一区二区| 色偷偷偷综合中文字幕;dd| 欧洲大片精品免费永久看nba| 成人免费毛片在线观看| 国产人成亚洲第一网站在线播放| 国产精品九九九九| 91精品国产91久久久久久最新 | av动漫在线播放| 久久综合九色综合97_久久久| 波多野结衣毛片| 欧美成人在线免费| 天堂俺去俺来也www久久婷婷| 尤蜜粉嫩av国产一区二区三区| 亚洲视频你懂的| 污视频网站在线播放| 国产欧美一区二区三区在线| 黄色在线一区| 成人做爰69片免网站| 日韩欧美中文字幕精品| 中文字幕乱码在线播放| 精品91一区二区三区| 91色乱码一区二区三区| 国产乱淫av片免费| 日韩免费观看av| 欧美va天堂在线| x88av在线| 亚洲护士老师的毛茸茸最新章节| 黄页免费欧美| 看av免费毛片手机播放| 亚洲免费大片在线观看| lutube成人福利在线观看|