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

鴻蒙應(yīng)用開(kāi)發(fā)入門(七):實(shí)現(xiàn)跨設(shè)備遷移

開(kāi)發(fā)
文章由鴻蒙社區(qū)產(chǎn)出,想要了解更多內(nèi)容請(qǐng)前往:51CTO和華為官方戰(zhàn)略合作共建的鴻蒙技術(shù)社區(qū)https://harmonyos.51cto.com/#zz

[[374071]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com/#zz

6.2 跨設(shè)備遷移

1. 分布式任務(wù)調(diào)度概述

在HarmonyOS中,分布式任務(wù)調(diào)度平臺(tái)對(duì)搭載HarmonyOS的多設(shè)備構(gòu)筑的“超級(jí)虛擬終端”提供統(tǒng)一的組件管理能力,為應(yīng)用定義統(tǒng)一的能力基線、接口形式、數(shù)據(jù)結(jié)構(gòu)、服務(wù)描述語(yǔ)言,屏蔽硬件差異;支持遠(yuǎn)程啟動(dòng)、遠(yuǎn)程調(diào)用、業(yè)務(wù)無(wú)縫遷移等分布式任務(wù)。

2. 實(shí)現(xiàn)調(diào)度的約束與限制

1)遠(yuǎn)程調(diào)用PA/FA,開(kāi)發(fā)者需要在Intent中設(shè)置支持分布式的標(biāo)記(例如:Intent.FLAG_ABILITYSLICE_MULTI_DEVICE表示該應(yīng)用支持分布式調(diào)度),否則將無(wú)法獲得分布式能力。

2)開(kāi)發(fā)者通過(guò)在config.json中的reqPermissions字段里添加權(quán)限申請(qǐng):

(1)以獲取跨設(shè)備連接的能力和分布式數(shù)據(jù)傳輸?shù)臋?quán)限。

分布式數(shù)據(jù)傳輸?shù)臋?quán)限:

  1. {"name""ohos.permission.servicebus.ACCESS_SERVICE"

三方應(yīng)用使用權(quán)限:

  1. {"name""ohos.permission.servicebus.DISTRIBUTED_DATASYNC"

系統(tǒng)應(yīng)用使用權(quán)限:

 

  1. {"name""com.huawei.hwddmp.servicebus.BIND_SERVICE"

(2)另外還有三個(gè)獲取分布式設(shè)備信息需要的權(quán)限:

  1. {"name""ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE"}, 
  2.  
  3. {"name""ohos.permission.GET_DISTRIBUTED_DEVICE_INFO" }, 
  4.  
  5. "name""ohos.permission.GET_BUNDLE_INFO"

 注意:還需要在開(kāi)發(fā)的時(shí)候,要在Ability里主動(dòng)聲明,要用到的權(quán)限。

3)FA(Feature Ability,Page模板的Ability)的調(diào)用支持啟動(dòng)和遷移行為,在進(jìn)行調(diào)度時(shí):

(1)當(dāng)啟動(dòng)FA時(shí),需要開(kāi)發(fā)者在Intent中指定對(duì)端設(shè)備的deviceId、bundleName和abilityName。

(2)FA的遷移實(shí)現(xiàn)相同bundleName和abilityName的FA跨設(shè)備遷移,因此需要指定遷移設(shè)備的deviceId。

3. 實(shí)現(xiàn)場(chǎng)景介紹

下面以設(shè)備A(本地設(shè)備)和設(shè)備B(遠(yuǎn)端設(shè)備)為例,介紹下面我們要實(shí)現(xiàn)的場(chǎng)景:

1)設(shè)備A啟動(dòng)設(shè)備B的FA:在設(shè)備A上通過(guò)本地應(yīng)用提供的啟動(dòng)按鈕,啟動(dòng)設(shè)備B上對(duì)應(yīng)的FA。

2)設(shè)備A的FA遷移至設(shè)備B:設(shè)備A上通過(guò)本地應(yīng)用提供的遷移按鈕,將設(shè)備A的業(yè)務(wù)無(wú)縫遷移到設(shè)備B中。

3)設(shè)備A的FA遷移至設(shè)備B,還可以實(shí)現(xiàn)主動(dòng)撤回遷移。

4. 具體實(shí)現(xiàn)前先了解要用的接口

1)啟動(dòng)遠(yuǎn)程FA

startAbility(Intent intent)接口提供啟動(dòng)指定設(shè)備上FA和PA的能力,Intent中指定待啟動(dòng)FA的設(shè)備deviceId、bundleName和abilityName。

2)遷移FA

continueAbility(String deviceId)接口提供將本地FA遷移到指定設(shè)備上的能力,continueAbilityReversibly(String deviceId) 接口提供將本地FA遷移到指定設(shè)備上的能力,這種遷移可撤回, reverseContinueAbility()接口提供撤回遷移的能力。

5. 實(shí)戰(zhàn)遠(yuǎn)程啟動(dòng)FA頁(yè)面

1)編程實(shí)現(xiàn)上面場(chǎng)景的界面:

ability_main.xml 

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <DirectionalLayout 
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  4.     ohos:height="match_parent" 
  5.     ohos:width="match_parent" 
  6.     ohos:orientation="vertical"
  7.  
  8.     <Button 
  9.         ohos:id="$+id:migration_btn_01" 
  10.         ohos:height="match_content" 
  11.         ohos:width="300vp" 
  12.         ohos:text="1.啟動(dòng)遠(yuǎn)程設(shè)備的FA" 
  13.         ohos:text_size="20fp" 
  14.         ohos:text_color="#ffffff" 
  15.         ohos:background_element="$graphic:button_bg" 
  16.         ohos:layout_alignment="horizontal_center" 
  17.         ohos:top_padding="8vp" 
  18.         ohos:bottom_padding="8vp" 
  19.         ohos:left_padding="40vp" 
  20.         ohos:right_padding="40vp" 
  21.         ohos:top_margin="20vp" 
  22.         /> 
  23.  
  24.     <Button 
  25.         ohos:id="$+id:migration_btn_02" 
  26.         ohos:height="match_content" 
  27.         ohos:width="300vp" 
  28.         ohos:text="2.遷移到遠(yuǎn)程設(shè)備" 
  29.         ohos:text_size="20fp" 
  30.         ohos:text_color="#ffffff" 
  31.         ohos:background_element="$graphic:button_bg" 
  32.         ohos:layout_alignment="horizontal_center" 
  33.         ohos:top_padding="8vp" 
  34.         ohos:bottom_padding="8vp" 
  35.         ohos:left_padding="40vp" 
  36.         ohos:right_padding="40vp" 
  37.         ohos:top_margin="20vp" 
  38.         /> 
  39.  
  40.  
  41.     <Button 
  42.         ohos:id="$+id:migration_btn_03" 
  43.         ohos:height="match_content" 
  44.         ohos:width="300vp" 
  45.         ohos:text="3.可遷回的遷移遠(yuǎn)程設(shè)備" 
  46.         ohos:text_size="20fp" 
  47.         ohos:text_color="#ffffff" 
  48.         ohos:background_element="$graphic:button_bg" 
  49.         ohos:layout_alignment="horizontal_center" 
  50.         ohos:top_padding="8vp" 
  51.         ohos:bottom_padding="8vp" 
  52.         ohos:left_padding="40vp" 
  53.         ohos:right_padding="40vp" 
  54.         ohos:top_margin="20vp" 
  55.         /> 
  56. </DirectionalLayou 

 button_bg.xml

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <shape  xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  3.         ohos:shape="rectangle"
  4.     <solid ohos:color="#007DFF"/> 
  5.     <corners ohos:radius="40"/> 
  6. </ 

 MigrationAbility和MigrationBackAbility

  1. // 調(diào)用AbilitySlice模板實(shí)現(xiàn)一個(gè)用于控制基礎(chǔ)功能的FA 
  2. // Ability和AbilitySlice類均需要實(shí)現(xiàn)IAbilityContinuation及其方法,才可以實(shí)現(xiàn)FA遷移。AbilitySlice的代碼示例如下 
  3. public class SampleSlice extends AbilitySlice implements IAbilityContinuation { 
  4.     @Override 
  5.     public void onStart(Intent intent) { 
  6.         super.onStart(intent); 
  7.         
  8.         super.setUIContent(layout); 
  9.     } 

ability_migration.xml

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <DirectionalLayout 
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  4.     ohos:height="match_parent" 
  5.     ohos:width="match_parent" 
  6.     ohos:background_element="#00ffff" 
  7.     ohos:orientation="vertical"
  8.  
  9.     <Text 
  10.         ohos:id="$+id:text_title" 
  11.         ohos:height="match_content" 
  12.         ohos:width="250vp" 
  13.         ohos:background_element="#0088bb" 
  14.         ohos:layout_alignment="horizontal_center" 
  15.         ohos:text="下面是一個(gè)可編輯的文本框" 
  16.         ohos:text_size="50" 
  17.         ohos:padding="5vp" 
  18.         ohos:top_margin="30vp" 
  19.         /> 
  20.  
  21.     <TextField 
  22.         ohos:id="$+id:textfield_back" 
  23.         ohos:height="250vp" 
  24.         ohos:width="250vp" 
  25.         ohos:hint="請(qǐng)輸入..." 
  26.         ohos:layout_alignment="horizontal_center" 
  27.         ohos:background_element="#ffffff" 
  28.         ohos:text_color="#888888" 
  29.         ohos:text_size="20fp" 
  30.         ohos:padding="5vp" 
  31.         /> 
  32.     <Button 
  33.         ohos:id="$+id:migration_button" 
  34.         ohos:height="match_content" 
  35.         ohos:width="match_content" 
  36.         ohos:text="點(diǎn)擊遷移" 
  37.         ohos:text_size="20fp" 
  38.         ohos:text_color="#ffffff" 
  39.         ohos:background_element="$graphic:button_bg" 
  40.         ohos:top_padding="8vp" 
  41.         ohos:bottom_padding="8vp" 
  42.         ohos:left_padding="50vp" 
  43.         ohos:right_padding="50vp" 
  44.         ohos:layout_alignment="horizontal_center" 
  45.         ohos:top_margin="30vp" 
  46.         /> 
  47. </DirectionalLayou 

 ability_migration_back.xml比ability_migration.xml多一個(gè)遷回按鈕,另外主頁(yè)上點(diǎn)擊按鈕跳轉(zhuǎn)等,略...

2)使用分布式能力要求開(kāi)發(fā)者在Ability對(duì)應(yīng)的config.json中聲明多設(shè)備協(xié)同訪問(wèn)的權(quán)限:

(1)三方應(yīng)用部署權(quán)限、分布式數(shù)據(jù)傳輸?shù)臋?quán)限、系統(tǒng)應(yīng)用使用權(quán)限的申請(qǐng)。

  1.     "reqPermissions": [ 
  2.         {"name""ohos.permission.DISTRIBUTED_DATASYNC"}, 
  3.         {"name""ohos.permission.servicebus.ACCESS_SERVICE"}, 
  4.         {"name""com.huawei.hwddmp.servicebus.BIND_SERVICE"}      
  5.     ] 

 (2)聲明分布式獲取設(shè)備列表及設(shè)備信息的權(quán)限,如下所示:

  1.     "reqPermissions": [ 
  2.         {"name""ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE"},  
  3.         {"name""ohos.permission.GET_DISTRIBUTED_DEVICE_INFO" },  
  4.         {"name""ohos.permission.GET_BUNDLE_INFO"
  5.     ] 

 (3)對(duì)于三方應(yīng)用還要求在實(shí)現(xiàn)Ability的代碼中顯式聲明需要使用的權(quán)限。 

  1. public class SampleSlice extends AbilitySlice implements IAbilityContinuation { 
  2.     @Override 
  3.     public void onStart(Intent intent) { 
  4.         // 開(kāi)發(fā)者顯示聲明需要使用的權(quán)限 
  5.         requestPermissionsFromUser(new String[]{"ohos.permission.DISTRIBUTED_DATASYNC"
  6.                                                 "ohos.permission.servicebus.ACCESS_SERVICE"
  7.                                                 "com.huawei.hwddmp.servicebus.BIND_SERVICE"}, 0); 
  8.         super.onStart(intent);         
  9.     } 

 3) 為啟動(dòng)遠(yuǎn)程FA的按鈕添加點(diǎn)擊事件,獲取設(shè)備信息,實(shí)現(xiàn)啟動(dòng)遠(yuǎn)程FA的能力。 

  1. Button btn1 = (Button) findComponentById(ResourceTable.Id_migration_btn_01); 
  2. btn1.setClickedListener(new Component.ClickedListener() { 
  3.     @Override 
  4.     public void onClick(Component component) { 
  5.         // 調(diào)用DeviceManager的getDeviceList接口,通過(guò)FLAG_GET_ONLINE_DEVICE標(biāo)記獲得在線設(shè)備列表 
  6.         List<DeviceInfo> onlineDevices = DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ONLINE_DEVICE); 
  7.         // 判斷組網(wǎng)設(shè)備是否為空 
  8.         if (onlineDevices.isEmpty()) { 
  9.             return
  10.         } 
  11.         int numDevices = onlineDevices.size(); 
  12.  
  13.         ArrayList<String> deviceIds = new ArrayList<>(numDevices); 
  14.         ArrayList<String> deviceNames = new ArrayList<>(numDevices); 
  15.         onlineDevices.forEach((device) -> { 
  16.             deviceIds.add(device.getDeviceId()); 
  17.             deviceNames.add(device.getDeviceName()); 
  18.         }); 
  19.         // 我們這里只有兩個(gè)設(shè)備,所以選擇首個(gè)設(shè)備作為目標(biāo)設(shè)備 
  20.         // 開(kāi)發(fā)者也可按照具體場(chǎng)景,通過(guò)別的方式進(jìn)行設(shè)備選擇 
  21.         String selectDeviceId = deviceIds.get(0); 
  22.          
  23.         //獲取設(shè)備ID,最好放到工具類里,很多地方要用! 
  24.  
  25.         if(selectDeviceId!=null){ 
  26.             Intent intent2 = new Intent(); 
  27.             Operation operation = new Intent.OperationBuilder() 
  28.                     .withDeviceId(selectDeviceId) 
  29.                     .withBundleName("cn.ybzy.hmsdemo"
  30.                     .withAbilityName("cn.ybzy.hmsdemo.RemoteAbility"
  31.                     .withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE) 
  32.                     .build(); 
  33.             intent2.setOperation(operation); 
  34.             // 通過(guò)AbilitySlice包含的startAbility接口實(shí)現(xiàn)跨設(shè)備啟動(dòng)FA 
  35.             startAbility(intent2); 
  36.         } 
  37.     } 
  38. }); 

 6. 實(shí)戰(zhàn)將設(shè)備A運(yùn)行時(shí)的FA遷移到設(shè)備B,實(shí)現(xiàn)業(yè)務(wù)在設(shè)備間無(wú)縫遷移。

MigrationAbility

  1. public class MigrationAbility extends Ability implements IAbilityContinuation  { 
  2.     @Override 
  3.     public void onStart(Intent intent) { 
  4.         super.onStart(intent); 
  5.         super.setMainRoute(MigrationAbilitySlice.class.getName()); 
  6.     } 
  7.  
  8.     @Override 
  9.     public boolean onStartContinuation() { 
  10.         return true
  11.     } 
  12.  
  13.     @Override 
  14.     public boolean onSaveData(IntentParams intentParams) { 
  15.         return true
  16.     } 
  17.  
  18.     @Override 
  19.     public boolean onRestoreData(IntentParams intentParams) { 
  20.         return true
  21.     } 
  22.  
  23.     @Override 
  24.     public void onCompleteContinuation(int i) { 
  25.  
  26.     } 

 MigrationAbilitySlice 

  1. public class MigrationAbilitySlice extends AbilitySlice implements IAbilityContinuation { 
  2.     TextField textField; 
  3.     String textStr = "請(qǐng)輸入數(shù)據(jù)..."
  4.     @Override 
  5.     public void onStart(Intent intent) { 
  6.         super.onStart(intent); 
  7.         super.setUIContent(ResourceTable.Layout_ability_migration); 
  8.         textField = (TextField)findComponentById(ResourceTable.Id_textfield_migration); 
  9.         textField.setText(textStr); 
  10.         Button btn = (Button) findComponentById(ResourceTable.Id_migration_button); 
  11.         btn.setClickedListener(new Component.ClickedListener() { 
  12.             @Override 
  13.             public void onClick(Component component) { 
  14.                 String deviceId = getDeviceId(); 
  15.                 if(deviceId!=null){ 
  16.                     continueAbility(deviceId); 
  17.                 } 
  18.             } 
  19.         }); 
  20.  
  21.     } 
  22.  
  23.     private String getDeviceId(){ 
  24.         // 調(diào)用DeviceManager的getDeviceList接口,通過(guò)FLAG_GET_ONLINE_DEVICE標(biāo)記獲得在線設(shè)備列表 
  25.         List<DeviceInfo> onlineDevices = DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ONLINE_DEVICE); 
  26.         // 判斷組網(wǎng)設(shè)備是否為空 
  27.         if (onlineDevices.isEmpty()) { 
  28.             return null
  29.         } 
  30.         int numDevices = onlineDevices.size(); 
  31.  
  32.         ArrayList<String> deviceIds = new ArrayList<>(numDevices); 
  33.         ArrayList<String> deviceNames = new ArrayList<>(numDevices); 
  34.         onlineDevices.forEach((device) -> { 
  35.             deviceIds.add(device.getDeviceId()); 
  36.             deviceNames.add(device.getDeviceName()); 
  37.         }); 
  38.         // 我們這里只有兩個(gè)設(shè)備,所以選擇首個(gè)設(shè)備作為目標(biāo)設(shè)備 
  39.         // 開(kāi)發(fā)者也可按照具體場(chǎng)景,通過(guò)別的方式進(jìn)行設(shè)備選擇 
  40.         String selectDeviceId = deviceIds.get(0); 
  41.         return selectDeviceId; 
  42.     } 
  43.  
  44.     @Override 
  45.     public boolean onStartContinuation() { 
  46.         return true
  47.     } 
  48.  
  49.     @Override 
  50.     public boolean onSaveData(IntentParams intentParams) { 
  51.         intentParams.setParam("data",textField.getText()); 
  52.         return true
  53.     } 
  54.  
  55.     @Override 
  56.     public boolean onRestoreData(IntentParams intentParams) { 
  57.         textStr = intentParams.getParam("data").toString(); 
  58.         return true
  59.     } 
  60.  
  61.     @Override 
  62.     public void onCompleteContinuation(int i) { 
  63.  
  64.     } 
  65.  
  66.     @Override 
  67.     public void onRemoteTerminated() { 
  68.  
  69.     } 

 此外,不同于啟動(dòng)行為,F(xiàn)A的遷移還涉及到狀態(tài)數(shù)據(jù)的傳遞。為此,繼承的IAbilityContinuation接口為開(kāi)發(fā)者提供遷移過(guò)程中特定事件的管理能力。通過(guò)自定義遷移事件相關(guān)的行為,最終實(shí)現(xiàn)對(duì)Ability的遷移。主要以較為常用的兩個(gè)事件,包括遷移發(fā)起端完成遷移的回調(diào)onCompleteContinuation(int result)以及接收到遠(yuǎn)端遷移行為傳遞數(shù)據(jù)的回調(diào)onRestoreData(IntentParams restoreData)。其他還包括遷移到遠(yuǎn)端設(shè)備的FA關(guān)閉的回調(diào)onRemoteTerminated()、用于本地遷移發(fā)起時(shí)保存狀態(tài)數(shù)據(jù)的回調(diào)onSaveData(IntentParams saveData)和本地發(fā)起遷移的回調(diào)onStartContinuation()。

7. 請(qǐng)求回遷

  1. Button btn1 = (Button) findComponentById(ResourceTable.Id_migration_button_back); 
  2. btn1.setClickedListener(new Component.ClickedListener() { 
  3.     @Override 
  4.     public void onClick(Component component) { 
  5.         String deviceId = DeviceUtils.getDeviceId(); 
  6.         if(deviceId!=null){ 
  7.             continueAbilityReversibly(deviceId);  //可撤回遷移 
  8.         } 
  9.     } 
  10. }); 
  11.  
  12. Button btn2 = (Button) findComponentById(ResourceTable.Id_migration_button_back2); 
  13. btn2.setClickedListener(new Component.ClickedListener() { 
  14.     @Override 
  15.     public void onClick(Component component) { 
  16.         reverseContinueAbility();  //撤回遷移 
  17.     } 
  18. }); 

 1)設(shè)備A上的Page請(qǐng)求回遷。

2)系統(tǒng)回調(diào)設(shè)備B上Page及其AbilitySlice棧中所有AbilitySlice實(shí)例的IAbilityContinuation.onStartContinuation()方法,以確認(rèn)當(dāng)前是否可以立即遷移。

3)如果可以立即遷移,則系統(tǒng)回調(diào)設(shè)備B上Page及其AbilitySlice棧中所有AbilitySlice實(shí)例的IAbilityContinuation.onSaveData()方法,以便保存回遷后恢復(fù)狀態(tài)必須的數(shù)據(jù)。

4)如果保存數(shù)據(jù)成功,則系統(tǒng)在設(shè)備A上Page恢復(fù)AbilitySlice棧,然后回調(diào)IAbilityContinuation.onRestoreData()方法,傳遞此前保存的數(shù)據(jù)。

5)如果數(shù)據(jù)恢復(fù)成功,則系統(tǒng)終止設(shè)備B上Page的生命周期。

©著作權(quán)歸作者和HarmonyOS技術(shù)社區(qū)共同所有,如需轉(zhuǎn)載,請(qǐng)注明出處,否則將追究法律責(zé)任

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com/#zz

 

責(zé)任編輯:jianghua 來(lái)源: 鴻蒙社區(qū)
相關(guān)推薦

2020-11-05 10:05:25

App

2021-06-16 15:18:03

鴻蒙HarmonyOS應(yīng)用

2021-12-21 09:56:47

鴻蒙HarmonyOS應(yīng)用

2022-10-24 14:54:29

LWIP協(xié)議鴻蒙

2020-10-15 09:49:45

HarmonyOS 2設(shè)備開(kāi)發(fā)

2014-12-11 11:03:20

Qt跨平臺(tái)開(kāi)發(fā)

2020-12-25 10:52:28

鴻蒙HarmonyOS應(yīng)用開(kāi)發(fā)

2021-11-03 09:51:45

鴻蒙HarmonyOS應(yīng)用

2024-08-13 15:50:57

2025-02-17 07:20:00

Flutter 3Flutter開(kāi)發(fā)

2022-07-01 17:06:49

Fractio鴻蒙

2020-12-24 12:01:16

鴻蒙HarmonyOS應(yīng)用開(kāi)發(fā)

2021-08-17 10:20:14

鴻蒙HarmonyOS應(yīng)用

2021-01-05 10:35:04

鴻蒙HarmonyOS應(yīng)用開(kāi)發(fā)

2014-07-08 09:37:28

跨平臺(tái)Webhtml5

2020-11-09 11:56:49

HarmonyOS

2025-04-16 10:00:00

跨平臺(tái)開(kāi)發(fā)Uniapp開(kāi)發(fā)

2015-03-17 09:59:41

跨平臺(tái)

2015-09-07 09:21:32

移動(dòng)應(yīng)用Android平臺(tái)模板

2020-09-28 15:13:04

鴻蒙
點(diǎn)贊
收藏

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

国产精品高潮视频| 91夜夜蜜桃臀一区二区三区| 水蜜桃久久夜色精品一区| 亚洲欧美福利一区二区| 国产精品第3页| 国产精品丝袜一区二区| 视频一区二区免费| 欧美在线网站| 欧美日韩成人高清| 日韩av在线电影观看| 在线观看亚洲欧美| 九九热播视频在线精品6| 亚洲视频每日更新| 成人亚洲综合色就1024| 蜜桃av.com| 午夜日韩成人影院| 久久久精品免费网站| 欧美在线视频免费观看| 国产ts丝袜人妖系列视频| 999av小视频在线| 欧美激情五月| 日韩视频免费观看高清完整版在线观看| 日韩一本精品| 天天躁日日躁狠狠躁喷水| 麻豆久久久久久久| xxxxx91麻豆| 午夜xxxxx| 亚洲精品白浆| www.性欧美| 26uuu另类亚洲欧美日本一| 在线免费观看污视频| 国内精彩免费自拍视频在线观看网址| 97成人超碰视| 国产91在线视频| 国产又粗又黄又猛| 亚洲日韩中文字幕一区| 亚洲欧美激情在线| 视频一区亚洲| 国产又色又爽又黄又免费| 91精品啪在线观看国产81旧版| 91精品国产综合久久福利软件| 免费久久久久久| 欧美一区二区黄片| 久久成人精品| 色综合影院在线| xxxx视频在线观看| 中文字幕 在线观看| 国产精品少妇自拍| av色综合网| 国产99免费视频| 一区二区三区四区在线观看国产日韩| 精品久久一区二区三区| 国产最新免费视频| 在线国产91| 成人不卡免费av| 国产精品v日韩精品| 国产午夜免费福利| 欧美成人精品一区二区三区在线看| 亚洲美女av在线播放| 一本一道久久a久久综合蜜桃| 日韩免费影院| 亚洲国产毛片aaaaa无费看| 欧美主播一区二区三区美女 久久精品人| 在线观看免费中文字幕| 亚洲成人资源| 国产亚洲精品久久久久久| 老女人性生活视频| 日韩精选视频| 午夜免费久久看| 中文精品一区二区三区| 四虎成人免费在线| 国内不卡的二区三区中文字幕 | 国产精品一二三视频| 久久国产精品国语对白| 亚洲精品91| 欧美激情亚洲激情| а天堂中文在线资源| 99精品综合| 亚洲人成电影网站色xx| 亚洲精品成人无码毛片| 国产欧美自拍一区| 欧美一区二区三区男人的天堂| 岛国av免费在线| 成人自拍av| 欧美乱妇一区二区三区不卡视频| 国产免费毛卡片| 粉嫩一区二区三区| 欧美日韩另类国产亚洲欧美一级| 免费国偷自产拍精品视频| 老汉色老汉首页av亚洲| 亚洲最新av网址| 网站免费在线观看| 日本高清免费电影一区| 亚洲剧情一区二区| 日韩亚洲欧美中文字幕| 亚洲视频久久| 欧美激情精品久久久久久变态| 99re6热在线精品视频| 欧美午夜在线视频| 国产成人在线视频| 无码人妻丰满熟妇精品| 国产亚洲成人一区| 久久久久久亚洲精品中文字幕| av黄色在线播放| 国产在线视频一区二区| 成人网中文字幕| 午夜影院免费体验区| 99久精品国产| 在线视频不卡一区二区三区| 女海盗2成人h版中文字幕| 午夜视频久久久久久| 少妇一级淫免费放| julia一区二区三区中文字幕| 色天天综合色天天久久| 日韩中文字幕免费在线| 亚洲成人人体| 精品88久久久久88久久久| 337p日本欧洲亚洲大胆张筱雨 | 国产精品一二三在线观看| 午夜看片在线免费| 国产精品毛片大码女人| 免费观看国产精品视频| 亚洲电影观看| 欧美一区二区日韩一区二区| 成人免费无遮挡无码黄漫视频| 国产欧美日韩| 中文字幕综合一区| 污污的视频在线免费观看| 久久国产免费| 精品不卡一区二区三区| 免费福利在线视频| 国产精品狼人久久影院观看方式| 成人在线观看你懂的| 日韩一二三区| 日韩精品视频在线免费观看| 亚洲激情视频小说| 日韩欧美字幕| 欧美贵妇videos办公室| 一卡二卡三卡在线| 国产成人99久久亚洲综合精品| 国产一区二区免费在线观看| 欧美成熟毛茸茸| 午夜不卡av免费| 天堂www中文在线资源| 九九精品久久| 久久视频中文字幕| 成年免费在线观看| 全部av―极品视觉盛宴亚洲| 91香蕉亚洲精品| 四虎永久在线观看| 亚洲妇熟xx妇色黄| 无码国产精品一区二区免费式直播| 亚洲+小说+欧美+激情+另类| 色噜噜狠狠狠综合曰曰曰| 国产99免费视频| 欧美激情一区二区三区不卡| 青草网在线观看| 在线观看精品| 国产一区二区日韩精品欧美精品| 极品国产91在线网站| 久久这里只精品最新地址| 在线观看精品视频| 国产精品久久免费视频 | 国产精品香蕉av| 午夜不卡视频| 欧美mv日韩mv| 亚洲天堂一区在线| 日本不卡在线视频| 亚洲自拍偷拍二区| 国产在线天堂www网在线观看| 亚洲激情视频在线| 最新一区二区三区| 国产成人亚洲精品狼色在线| 视频一区二区三区免费观看| 亚洲伦理一区二区| 久久久久国产精品免费网站| 特黄aaaaaaaaa真人毛片| 91成人看片片| 中文字幕影片免费在线观看| 另类激情亚洲| youjizz.com亚洲| 97成人在线| 国产精品91久久久久久| 黄网站视频在线观看| 欧美自拍偷拍午夜视频| 午夜成人亚洲理伦片在线观看| 久久国产日韩| 懂色av一区二区三区四区五区| 国产成人精品亚洲线观看| 国产精品国模在线| 中文字幕资源网在线观看| 欧美日韩一区小说| 国产黄色大片免费看| 免费在线日韩av| 精品国产一区二区三区免费| 成人激情视屏| 欧美激情视频一区二区| 国产毛片av在线| 日本精品一区二区三区高清 | 国产三级视频网站| 亚洲精品韩国| 国产视频不卡| 欧美成人高清视频在线观看| 在线播放日韩av| 亚洲精品综合久久| 亚洲无人区一区| 亚洲色图欧美另类| 亚洲一级特黄| 一区二区三区四区国产| 久青草免费视频| 美女久久精品| 日韩资源在线观看| 深夜福利在线观看直播| 午夜视频一区在线观看| 内射一区二区三区| 国产欧美一区二区精品秋霞影院 | 亚洲专区**| 欧美高清videos高潮hd| 国产网站在线播放| 亚洲精品美女在线观看播放| 国产特级aaaaaa大片| 亚洲曰韩产成在线| 亚洲av永久无码精品| 激情久久久久久久久久久久久久久久| 欧美黄网站在线观看| 亚洲福利网站| 国内精品久久国产| 91嫩草精品| 97在线电影| 欧美aaaaa性bbbbb小妇| 欧美激情一区二区三区在线视频观看| av小片在线| 一区二区三区精品99久久 | 亚洲不卡中文字幕无码| 欧美精品自拍| www.日本三级| 国产精品hd| 国产一级不卡视频| 欧美1区免费| 激情视频小说图片| 中文字幕亚洲综合久久五月天色无吗'' | www.日日夜夜| 天天av天天翘天天综合网 | 亚洲福利一区二区三区| 私库av在线播放| 99re成人精品视频| 挪威xxxx性hd极品| 成人激情综合网站| 偷偷色噜狠狠狠狠的777米奇| 成人黄色在线视频| 最近中文字幕无免费| 91欧美一区二区| 亚洲黄色片免费看| 国产一区二区三区免费播放| 五月六月丁香婷婷| 懂色av一区二区夜夜嗨| 日韩av资源在线| 亚洲一区亚洲| 91蝌蚪视频在线观看| 奇米影视一区二区三区| 精品久久久99| 国产风韵犹存在线视精品| 四虎国产精品免费| 99久精品国产| 国产探花视频在线播放| 国产精品超碰97尤物18| 成人影视免费观看| 国产午夜精品久久| 久久久久亚洲AV成人网人人小说| 国产成a人无v码亚洲福利| www.啪啪.com| 国产农村妇女精品| √天堂中文官网8在线| 亚洲第一成人在线| 国产一区二区视频免费| 欧美日韩一区高清| 亚洲男女视频在线观看| 欧美日韩国产天堂| 99国产揄拍国产精品| 亚洲国产精品资源| 国产一级片在线播放| 精品视频—区二区三区免费| 精品久久久无码中文字幕| 精品美女在线观看| 岛国在线大片| 精品视频久久久久久久| 日本中文字幕视频在线| 欧美激情精品久久久久久免费印度| 欧美日韩在线观看首页| 国产专区欧美专区| 日本一区免费网站| 欧美孕妇性xx| 羞羞视频在线观看一区二区| 国产精品久久久久高潮| 欧美一级大片在线视频| 欧美国产一二三区| 视频小说一区二区| 久久久一本精品99久久精品| 国产精品99久久免费观看| 欧美最大成人综合网| 欧美91大片| 成年人视频在线免费| 新67194成人永久网站| 成人av毛片在线观看| 久久综合色之久久综合| 亚洲国产成人精品综合99| 色婷婷av一区二区三区之一色屋| 国产黄色片免费看| 69精品人人人人| 精品女同一区二区三区| 亚洲人午夜色婷婷| 国产精品yjizz视频网| 91亚洲精品久久久| 欧美美女视频| 中文字幕一区二区三区乱码| 在线视频日韩| 日本www高清视频| 高清国产一区二区| 精品国产视频一区二区三区 | 国产又粗又猛又黄又爽| 亚洲免费av电影| 91丝袜在线| 国产福利不卡| 欧美日韩一本| 日产中文字幕在线精品一区| 狠狠色丁香久久综合频道| 三级av免费看| 亚洲视频在线一区二区| 中文字幕一区二区三区免费看| 欧美日韩一区二区三区四区| 蜜桃在线一区二区| 欧美成年人视频网站| 97人人爽人人澡人人精品| 成人亲热视频网站| 97精品中文字幕| 久久国产激情视频| 国v精品久久久网| 久草视频手机在线| 欧美精品乱码久久久久久| 91吃瓜网在线观看| 国产精品中文在线| 色喇叭免费久久综合| 日本中文字幕二区| 亚洲欧美另类图片小说| 国产哺乳奶水91在线播放| 日韩hd视频在线观看| 波多野结衣在线播放| 国产高清视频一区三区| 国产精品一区高清| 午夜视频在线瓜伦| 欧美经典三级视频一区二区三区| 成年人av网站| 日韩在线观看免费网站| 成人污污www网站免费丝瓜| 在线成人性视频| 国产成人精品三级麻豆| 国产精品成人国产乱| 欧美日韩视频第一区| 在线观看av黄网站永久| 成人有码在线播放| 国内精品美女在线观看| a天堂视频在线观看| 日韩欧美亚洲范冰冰与中字| 99视频免费看| 久久久久久久久久久久av| 欧美福利在线播放网址导航| 欧美韩国日本在线| 亚洲国产精华液网站w| 欧美一级视频免费观看| 亚洲精品小视频| 日韩第二十一页| 日本国产中文字幕| 激情综合五月婷婷| 日本熟妇乱子伦xxxx| 在线成人免费视频| 欧美一卡二卡| 91久久久久久国产精品| 国产精品红桃| 国产亚洲精品熟女国产成人| 7777精品伊人久久久大香线蕉 | 成人福利视频在线观看| 亚洲成人最新网站| 538国产视频| 欧美日韩高清一区二区不卡| 黄色的视频在线观看| 日韩国产美国| 国产成人日日夜夜| 亚洲国产成人精品女人久久| 美女扒开尿口让男人操亚洲视频网站| 卡通动漫精品一区二区三区| www.com操| 亚洲成人精品影院| 欧美成人精品一区二区男人看| 日韩av免费在线播放| 久久久久国产精品| 精品无码一区二区三区| 日韩精品一区二区三区四区 | 色啦啦av综合| 亚洲aaa精品| 国产乱色在线观看|