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

【鴻蒙基地】鴻蒙跨設備啟動窗口:Page Ability

開發
文章由鴻蒙社區產出,想要了解更多內容請前往:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com/#zz

 [[374061]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

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

HarmonyOS的核心特性(或稱為賣點)之一就是軟總線技術,而Page Ability的跨設備遷移是軟總線的一個具體技術實現。所謂跨設備遷移Page Ability,是指設備A中的特定App調用設備B中該App的Page Ability。這有一個前提,就是設備A和設備B都安裝了同一個App。如果B設備沒有安裝App,B設備就會自動從華為應用商店下載這個App,當然,這一過程是完全靜默的。下載完后,就會自動啟動相應的Page Ability。這種技術不僅可以啟動另一個設備上的Page Ability,還可以向另一個設備中的Page Ability傳遞數據。

這種技術的一個主要應用場景是,可以將在設備A上完成了一半的工作,遷移到設備B上繼續完成。例如,在家中平板電腦上要回一封EMail,但臨時有急事,需要出門,這時可以將在平板電腦上寫了一半的EMail遷移到手機上,需要在路上完成剩下的工作。

1. 跨設備遷移前的準備工作

在進行跨設備遷移之前,需要為HarmonyOS設備做一下準備:

(1) 打開HarmonyOS設備中的藍牙;

(2)HarmonyOS設備需要連入Wi-Fi,而且多個HarmonyOS需要在同一個網段;

(3)多個HarmonyOS設備需要用同一個華為開發者賬號登錄,如圖1所示。


圖1 用同一個華為開發者賬號登錄

(4)點擊“設置”>“更多連接”>“多設備協同”,進入多設備協同窗口,打開多設備協同開關,如圖2所示。

圖2 多設備協同

(5)修改HarmonyOS設備名。點擊“設置”>“藍牙”>“設備名稱”,進入設備名稱窗口,輸入一個新的什么名稱,如圖3所示。盡管這一步不是必須的,但如果擁有多部HarmonyOS設備,可能很多HarmonyOS設備的名稱是相同或相近的。為了更好區分不同的HarmonyOS設備,建議修改HarmonyOS設備名稱。

圖3 修改HarmonyOS設備名稱

2 獲取設備列表

跨設備遷移是通過設備ID來區分不同設備的,所以首先要獲取所有可用的設備的ID。獲取設備ID需要調用DeviceManager.getDeviceList方法,該方法返回一個List對象,類型是DeviceInfo,用來描述設備的相關信息,包括設備ID、設備名稱(就是上一節設置的設備名稱)等。實現代碼如下:

  1. List<DeviceInfo> deviceInfoList = DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ONLINE_DEVICE); 

getDeviceList方法有一個參數,是一個int類型的值,表示獲取什么狀態的設備的信息。可以指定的值如下:

(1) DeviceInfo.FLAG_GET_ONLINE_DEVICE:獲取所有在線設備的信息;

(2) DeviceInfo. FLAG_GET_OFFLINE_DEVICE:獲取所有離線設備的信息;

(3) DeviceInfo. FLAG_GET_ALL_DEVICE:獲取所有設備的信息;

通常會使用第1個值,獲取所有在線設備的信息,因為只有設備在線,才能將Page Ability遷移到該設備上。

下面給出一個案例,該案例實現了一個通用的顯示可用設備列表的Page Ability,點擊某一個設備,會返回該設備的ID,

在device_ids.xml布局文件中放置了一個ListContainer組件,用于顯示獲取的所有可用設備的相關信息。實現代碼如下:

  1. public class DeviceIdsAbility extends Ability { 
  2.     // 保存獲取到的所有設備的信息 
  3.     private List<DeviceInfo> deviceInfos; 
  4.     private ListContainer listContainerDeviceIds; 
  5.     // 獲取所有可用的設備的相關信息 
  6.     public static List<DeviceInfo> getAvailableDeviceIds() { 
  7.         List<DeviceInfo> deviceInfoList = 
  8.                 DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ONLINE_DEVICE); 
  9.         if (deviceInfoList == null) { 
  10.             return new ArrayList<>(); 
  11.         } 
  12.         if (deviceInfoList.size() == 0) { 
  13.             return new ArrayList<>(); 
  14.         } 
  15.         return deviceInfoList; 
  16.     } 
  17.     @Override 
  18.     public void onStart(Intent intent) { 
  19.         super.onStart(intent); 
  20.         super.setUIContent(ResourceTable.Layout_device_ids); 
  21.         deviceInfos = getAvailableDeviceIds(); 
  22.         listContainerDeviceIds = 、 
  23.         (ListContainer)findComponentById(ResourceTable.Id_listcontainer_deviceids); 
  24.         if(listContainerDeviceIds != null) { 
  25.             // 為ListContainer組件設置列表項監聽器 
  26.             listContainerDeviceIds.setItemClickedListener(new ListContainer.ItemClickedListener() { 
  27.                 @Override 
  28.                 public void onItemClicked(ListContainer listContainer, Component component, int i, long l) { 
  29.                     // 當單擊某個列表項(設備)后,會獲取該設備的ID,并將這個ID作為Page Ability 
  30.                     // 的結果返回 
  31.                     String deviceId = deviceInfos.get(i).getDeviceId(); 
  32.                     Intent intent = new Intent(); 
  33.                     intent.setParam("deviceId", deviceId); 
  34.                     setResult(100,intent); 
  35.                     // 關閉當前的Page Ability 
  36.                     terminateAbility(); 
  37.   
  38.                 } 
  39.             }); 
  40.             // 為ListContainer組件設置Provider 
  41.             listContainerDeviceIds.setItemProvider(new RecycleItemProvider() { 
  42.                 @Override 
  43.                 public int getCount() { 
  44.                     return deviceInfos.size(); 
  45.                 } 
  46.   
  47.                 @Override 
  48.                 public Object getItem(int i) { 
  49.                     return deviceInfos.get(i); 
  50.                 } 
  51.   
  52.                 @Override 
  53.                 public long getItemId(int i) { 
  54.                     return i; 
  55.                 } 
  56.   
  57.                 @Override 
  58.                 public Component getComponent(int i, Component component, ComponentContainer componentContainer) { 
  59.                     if(component == null) { 
  60.                         // 如果component為null,說明沒有可以利用的列表項視圖,所以要從布局文件 
  61.                         // 裝載一個新的視圖對象 
  62.                         component = (DirectionalLayout)LayoutScatter.getInstance(DeviceIdsAbility.this).parse(ResourceTable.Layout_device_id_item,null,false); 
  63.                     } 
  64.                     Text textDeviceName = (Text)component.findComponentById(ResourceTable.Id_text_device_name); 
  65.                     Text textDeviceId = (Text)component.findComponentById(ResourceTable.Id_text_device_id); 
  66.                     if(textDeviceName != null) { 
  67.                         // 顯示設備名 
  68.                         textDeviceName.setText(deviceInfos.get(i).getDeviceName()); 
  69.                     } 
  70.                     if(textDeviceId != null) { 
  71.                         // 顯示設備ID 
  72.                         textDeviceId.setText(deviceInfos.get(i).getDeviceId()); 
  73.                     } 
  74.                     return component; 
  75.                 } 
  76.             }); 
  77.   
  78.         } 
  79.   
  80.     } 

 在DeviceIdsAbility類中為ListContainer組件裝載列表項時,在getComponent方法中利用了第2個參數component,該參數就是列表項的根視圖。如果component為null,表明并沒有可以利用的列表項視圖,所以要創建一個新的列表項視圖。如果不為null,表明可以利用其他的還沒有顯示的列表項視圖,只需要替換該視圖的Text組件中顯示的信息即可。

最后在config.json文件中添加一些與分布式相關的權限。

  1.  "reqPermissions": [ 
  2.       { 
  3.         "name""ohos.permission.GET_DISTRIBUTED_DEVICE_INFO" 
  4.       }, 
  5.       { 
  6.         "name""com.huawei.permission.ACCESS_DISTRIBUTED_ABILITY_GROUP" 
  7.       }, 
  8.       { 
  9.         "name""ohos.permission.DISTRIBUTED_DATASYNC" 
  10.       } 

 運行程序,會看到如圖4所示的設備列表。


圖4 獲取可用設備的ID

要注意的是,通過DeviceManager.getDeviceList方法只能獲取其他設備的信息,不能獲取自身的信息,例如,有設備A、設備B和設備C。在設備A中只能獲取設備B和設備C的信息,而不能獲取設備A的信息。在設備B和設備C中的表現也類似。

3 根據設備ID調用Page Ability

一個Page Ability要想跨設備訪問,必須實現IAbilityContinuation接口,否則會拋出異常。該接口必須實現的有4個方法,他們的含義如下:

  1. public interface IAbilityContinuation { 
  2.     // 開始遷移,如果返回true,表示可以開始遷移 
  3.     boolean onStartContinuation(); 
  4.     // 開始傳遞數據,如果返回true,表示成功傳遞數據 
  5.     boolean onSaveData(IntentParams var1); 
  6.     // 開始恢復數據,如果返回true,表示成功恢復數據 
  7.     boolean onRestoreData(IntentParams var1); 
  8.     // 已經完成Page Ability遷移 
  9.     void onCompleteContinuation(int var1);  

 假設在設備A上將Page Ability遷移到設備B。onStartContinuation方法和onSaveData方法是在設備A上被調用的,而onRestoreData方法和onCompleteContinuation方法是在設備B上被調用的。為了遷移Page Ability,需要在設備A上執行下面的代碼:

  1. continueAbility(deviceId); 

其中deviceID是設備ID。當調用該方法后,在設備A上就會依次調用onStartContinuation方法和onSaveData方法,在設備B上會依次調用onRestoreData方法和onCompleteContinuation方法。其中onSaveData方法和onRestoreData方法都有一個IntentParams類型的參數,通過該參數可以在設備A和設備B之間通過Page Ability傳遞數據(使用方式與Intent類似)。通常在onRestoreData方法中恢復Page Ability從設備A上遷移到設備B上時的數據。

下面給出一個實際的案例,在Page Ability上放置了一個TextField組件,并在該組件中輸入了一些文本,然后點擊按鈕,將該Page Ability遷移到另一部HarmonyOS手機上,并恢復遷移時的數據。

實現代碼如下:

  1. public class CrossDevicePageAbility extends Ability implements IAbilityContinuation { 
  2.     private List<DeviceInfo> deviceInfos; 
  3.     private ListContainer listContainerDeviceIds; 
  4.     private TextField textFieldContent; 
  5.     private String content; 
  6.     // 授權方法 
  7.     private void requestPermission() { 
  8.         // 實現Page Ability跨設備遷移,必須用Java代碼申請下面的權限 
  9.         // 否則不會有任何反應 
  10.         String[] permission = { 
  11.                 "ohos.permission.DISTRIBUTED_DATASYNC"}; 
  12.         List<String> applyPermissions = new ArrayList<>(); 
  13.         for (String element : permission) { 
  14.             // 驗證自身是否已經獲得了該權限 
  15.             if (verifySelfPermission(element) != 0) { 
  16.                 if (canRequestPermission(element)) { 
  17.                     // 如果未獲得權限,將該權限添加到權限列表 
  18.                     applyPermissions.add(element); 
  19.                 } else { 
  20.                 } 
  21.             } else { 
  22.             } 
  23.         } 
  24.         // 申請相應權限 
  25.         requestPermissionsFromUser(applyPermissions.toArray(new String[0]), 0); 
  26.     } 
  27.     // 要想成功跨設備遷移Page Ability,該方法必須返回true 
  28.     @Override 
  29.     public boolean onStartContinuation() { 
  30.         return true
  31.     }     
  32.     @Override 
  33.     public boolean onSaveData(IntentParams intentParams) { 
  34.         // 保存要傳遞的數據 
  35.         intentParams.setParam("content",textFieldContent.getText()); 
  36.         return true
  37.     } 
  38.     @Override 
  39.     public boolean onRestoreData(IntentParams intentParams) { 
  40.         // 獲取傳遞過來的數據 
  41.         content = String.valueOf(intentParams.getParam("content")); 
  42.         return true
  43.     } 
  44.     @Override 
  45.     public void onCompleteContinuation(int i) { 
  46.   
  47.     } 
  48.     @Override 
  49.     protected void onAbilityResult(int requestCode, int resultCode, Intent resultData) { 
  50.         // 當選擇設備后,利用返回的設備ID遷移Page Ability 
  51.         if(resultCode == 100 && requestCode == 99) { 
  52.             // 獲取設備ID 
  53.             String deviceId = resultData.getStringParam("deviceId"); 
  54.             Tools.showTip(this, deviceId); 
  55.             // 跨設備遷移Page Ability 
  56.             continueAbility(deviceId); 
  57.         } 
  58.     } 
  59.   
  60.     @Override 
  61.     public void onStart(Intent intent) { 
  62.         super.onStart(intent); 
  63.         super.setUIContent(ResourceTable.Layout_cross_device_page_ability); 
  64.         // 申請權限 
  65.         requestPermission(); 
  66.         Button button = 
  67.           (Button)findComponentById(ResourceTable.Id_button_cross_device_page_ability); 
  68.         if(button != null) { 
  69.             button.setClickedListener(new Component.ClickedListener() { 
  70.                 @Override 
  71.                 public void onClick(Component component) { 
  72.                     // 顯示列表列表窗口 
  73.                     Intent intentPageAbility = new Intent(); 
  74.                     Operation operation = new Intent.OperationBuilder() 
  75.                             .withBundleName("com.unitymarvel.demo"
  76.                             .withAbilityName("com.unitymarvel.demo.ability.DeviceIdsAbility"
  77.                             .build(); 
  78.                     intentPageAbility.setOperation(operation); 
  79.                     startAbilityForResult(intentPageAbility,99); 
  80.                 } 
  81.             }); 
  82.         } 
  83.   
  84.         textFieldContent = (TextField)findComponentById(ResourceTable.Id_textfield_content); 
  85.         if(textFieldContent != null) { 
  86.             // 恢復TextField組件中的數據 
  87.             textFieldContent.setText(content); 
  88.         } 
  89.     } 

 閱讀這段代碼,需要了解下面幾點:

(1)要想成功遷移Page Ability,并成功傳遞數據。onStartContinuation方法、onSaveData方法和onRestoreData方法都必須返回true,如果讀者使用IDE的自動生成代碼功能,默認這幾個方法都會返回false,請將他們的返回值改成true;

(2)在HarmonyOS中有一些權限,并不是在config.json中聲明就可以了,還需要使用Java代碼申請,例如,Page Ability跨設備遷移就需要使用Java代碼申請ohos.permission.DISTRIBUTED_DATASYNC權限。如果是第一次申請,會彈出如圖5的授權對話框,點擊“始終允許”按鈕關閉該對話框,第2次申請權限,就不會彈出該對話框了;

(3)由于onRestoreData方法在onStart方法之前調用,所以不能直接在onRestoreData方法中使用組件對象,因為組件對象通常都是在onStart方法中創建的。所以在onRestoreData方法被調用時,這些組件對象還都是空。正確的做法是在onRestoreData方法中將要恢復的數據保存到成員變量中,然后在onStart方法中創建完組件對象后,用這些變量恢復組件中的數據。

(4)本例考慮了多部HarmonyOS設備遷移的問題,所以使用了上一節編寫的設備列表窗口。在開始跨設備遷移Page Ability之前,會先彈出一個設備列表窗口,當用戶選擇一個設備后,會返回該設備的ID,然后在onAbilityResult方法中獲取這個返回的設備ID,最后使用continueAbility方法遷移Page Ability;

圖5 授權對話框

現在運行程序,關閉授權對話框,并在TextField組件中輸入一些內容,最后點擊“跨設備遷移Page Ability”按鈕,會彈出一個設備列表窗口,選擇相應的設備后,會在選中的設備中彈出同樣的Page Ability,并且TextField組件的數據與原設備上的完全相同,如圖6所示。注意,只要被調用方安裝了App,不管設備是否已經啟動了App,否會自動彈出這個被遷移的Page Ability。

圖6 跨設備遷移Page Ability的效果

歡迎訪問李寧老師的【鴻蒙基地】專欄:https://harmonyos.51cto.com/column/17

李寧老師的課程主頁:https://edu.51cto.com/lecturer/974126.html

[[374064]]

©著作權歸作者和HarmonyOS技術社區共同所有,如需轉載,請注明出處,否則將追究法律責任

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

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

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-01-12 09:42:05

鴻蒙HarmonyOSPage Abilit

2020-12-28 11:19:06

鴻蒙HarmonyOSPage Abilit

2020-11-05 10:05:25

App

2021-07-01 09:19:56

鴻蒙HarmonyOS應用

2021-06-28 14:41:36

鴻蒙HarmonyOS應用

2021-06-16 15:18:03

鴻蒙HarmonyOS應用

2021-06-23 15:48:08

鴻蒙HarmonyOS應用

2021-01-06 11:21:56

鴻蒙HarmonyOS應用開發

2021-07-08 09:42:04

鴻蒙HarmonyOS應用

2022-07-27 22:03:53

HarmonyOS鴻蒙

2021-03-23 09:52:39

鴻蒙HarmonyOS應用開發

2022-09-07 15:28:02

Stage模型Ability

2021-03-29 09:59:09

鴻蒙HarmonyOS應用開發

2021-10-28 14:48:46

鴻蒙HarmonyOS應用

2020-12-29 11:51:16

鴻蒙HarmonyOS華為手機

2012-08-16 13:34:09

云基地

2021-06-18 14:55:57

鴻蒙HarmonyOS應用

2021-02-03 09:59:02

鴻蒙HarmonyOS應用開發

2020-11-09 11:56:49

HarmonyOS

2022-02-17 21:05:26

AbilityJS FAJava PA
點贊
收藏

51CTO技術棧公眾號

国产伦理片在线观看| 每日在线更新av| 99久久免费国产精精品| 国产一区日韩欧美| 亚洲视频777| 免费欧美一级片| 中文字幕在线中文字幕在线中三区| 国产色一区二区| 99久久精品无码一区二区毛片| 国产精品午夜影院| 91精品国产自产拍在线观看蜜| 亚洲成人黄色在线| xxx国产在线观看| а√天堂中文资源在线bt| 国产欧美一区二区精品忘忧草| 7777精品伊久久久大香线蕉语言| 亚洲精品男人的天堂| 亚洲最新色图| 伊人一区二区三区久久精品| 欧美做受高潮中文字幕| 免费成人黄色网| 欧美性xxxx极品hd欧美风情| 老司机午夜网站| aaa在线观看| 久久久午夜电影| 国产精品一区二| 国产同性人妖ts口直男| 日韩av网站在线观看| 2019av中文字幕| 免费看一级一片| 国产精品99久久久久久动医院| 亚洲男人第一av网站| 日本精品一二三| 日韩欧美中文字幕一区二区三区| 欧美一a一片一级一片| 欧美日本视频在线观看| 俺来俺也去www色在线观看| 亚洲色图19p| 亚洲在线视频一区二区| 韩国三级在线观看久| 26uuuu精品一区二区| 狠狠色噜噜狠狠色综合久| 国产成人精品无码高潮| 九色porny丨国产精品| 国产精品免费一区二区三区都可以| 久久久久久久久影院| 激情偷拍久久| 久久久亚洲影院| 国产一级免费观看| 欧美破处大片在线视频| 久久91超碰青草是什么| 欧美丰满艳妇bbwbbw| 一本一本久久a久久综合精品| 久久精品福利视频| 日韩精品一区二区亚洲av性色| 日韩久久精品网| www日韩欧美| 亚洲一二三在线观看| 希岛爱理av一区二区三区| 久久精品电影网站| 免费人成在线观看| 一区免费视频| 国产69久久精品成人看| 69视频免费在线观看| 久久久夜精品| 国产精品视频精品| 99国产成人精品| 丁香婷婷综合激情五月色| 动漫一区二区在线| 头脑特工队2免费完整版在线观看| 不卡一区二区在线| 欧美亚洲一级二级| jizz亚洲| 一区二区欧美视频| 男人揉女人奶房视频60分| 欧美极度另类| 欧美高清视频一二三区 | 久久精品在线免费观看| 日韩精品欧美在线| 国产在线激情| 亚洲高清视频中文字幕| 妞干网在线免费视频| 久久99久久久精品欧美| 日韩欧美国产系列| 少妇大叫太粗太大爽一区二区| 精品少妇av| 欧美成人合集magnet| 国产成人在线观看网站| 日韩精品成人一区二区在线| 亚洲a在线播放| 五月色婷婷综合| 国产精品成人一区二区三区夜夜夜| 在线观看污视频| 成人做爰视频www网站小优视频| 欧美三片在线视频观看| 97精品人人妻人人| av伊人久久| 午夜精品久久久久久99热软件| 日韩不卡高清视频| 国产福利91精品| 日韩亚洲视频在线| 黄色羞羞视频在线观看| 欧美性一二三区| 中国特级黄色大片| 日韩毛片视频| 欧美一区二三区| www.桃色av嫩草.com| 中文字幕精品一区二区精品绿巨人 | 亚洲国产aⅴ成人精品无吗| 国产野外作爱视频播放| 超碰在线成人| 久久国产视频网站| 久草视频在线免费| 成人av在线一区二区| 在线免费一区| 欧美日韩不卡| 亚洲精品中文字幕有码专区| 欧美卡一卡二卡三| 蜜桃av一区二区在线观看| 国产精品一码二码三码在线| 成人免费高清| 欧美日韩国产另类一区| 最新中文字幕视频| 在线不卡亚洲| 国产不卡一区二区在线观看| 米奇777四色精品人人爽| 色噜噜狠狠色综合欧洲selulu| 老司机午夜免费福利| 午夜欧美精品久久久久久久| 国产伦精品一区二区三区精品视频| 色资源在线观看| 午夜av一区二区三区| 日本xxxx免费| 综合天堂av久久久久久久| 国产专区精品视频| 午夜视频成人| 欧美三级电影在线看| 中国女人特级毛片| 性欧美暴力猛交另类hd| 另类视频在线观看+1080p| www.51av欧美视频| 亚洲国产精品一区二区久| 国产无精乱码一区二区三区| 国产盗摄女厕一区二区三区| 法国空姐在线观看免费| 国产精品久久免费视频 | eeuss鲁一区二区三区| 欧美一区二区久久| 永久久久久久久| 国产精品一级在线| 99久热在线精品视频| 日韩欧美一级| 亚洲**2019国产| 日韩偷拍自拍| 日本乱人伦aⅴ精品| 成熟人妻av无码专区| 蜜桃视频在线一区| 亚洲国产一区二区三区在线| 四虎国产精品免费久久5151| 久久精品国产69国产精品亚洲| 99久久精品国产成人一区二区| 一区二区三区四区五区视频在线观看 | 日本在线啊啊| 亚洲无限av看| 国产又粗又长视频| 亚洲综合免费观看高清完整版在线| 亚洲国产精品第一页| 亚洲色诱最新| 亚洲欧美国产一区二区| 国产亚洲观看| 97香蕉超级碰碰久久免费软件| 久草视频在线看| 欧美巨大另类极品videosbest | 精品国产鲁一鲁一区二区张丽| 丰满少妇一区二区三区| 免费av网站大全久久| 正在播放国产精品| 久久99精品国产自在现线| 欧美专区福利在线| 午夜免费视频在线国产| 精品国偷自产国产一区| 中文字幕免费观看| 亚洲人成影院在线观看| 精品一区二区视频在线观看| 久久一区国产| 狠狠干视频网站| 亚洲a级精品| 成人网页在线免费观看| 高清电影在线免费观看| 国产亚洲欧洲高清| www男人的天堂| 色综合久久88色综合天天6| 国产3级在线观看| 99re成人在线| xxxx在线免费观看| 国产精品一二| 国产911在线观看| 竹菊久久久久久久| 3d动漫啪啪精品一区二区免费 | 亚洲r级在线观看| www.成人爱| 欧美理论片在线观看| 国产视频精选在线| 亚洲成人av中文字幕| 91亚洲国产成人久久精品麻豆| 欧美日韩国产精品一区| 亚洲女人久久久| 国产色一区二区| 国产精品久久不卡| 国产一区二区毛片| 日本激情视频在线| 亚洲综合丁香| 国产精品久久..4399| 午夜久久免费观看| 视频在线精品一区| 日韩a级大片| 99久久自偷自偷国产精品不卡| 福利一区二区免费视频| 欧美在线性视频| 免费在线看电影| 久热精品视频在线观看| 91露出在线| 国产一区二区三区三区在线观看| 午夜国产在线视频| 精品久久久久久久一区二区蜜臀| 国产精品久久久久久久久毛片| 91国产免费观看| 黄瓜视频在线免费观看| 婷婷中文字幕一区三区| 久久久久久久久久久久久久免费看 | 色豆豆成人网| 日本sm极度另类视频| 2021天堂中文幕一二区在线观| 欧美乱大交xxxxx另类电影| 99视频在线观看地址| 尤物yw午夜国产精品视频| 日韩欧美亚洲系列| 日韩电影中文 亚洲精品乱码| 亚洲成a人片在线| 日韩欧美国产系列| 亚洲国产成人精品一区二区三区| 日韩网站在线看片你懂的| av中文字幕观看| 日韩午夜电影av| 亚洲精品18p| 亚洲第一在线视频| 日韩在线一区二区三区四区| 亚洲成人999| 天堂中文字幕在线| 亚洲欧美精品一区| 蜜桃成人在线视频| 这里只有精品久久| 国产鲁鲁视频在线观看特色| 久久影院模特热| 亚洲男同gay网站| 欧美激情综合色| 亚洲天堂免费电影| 国产精品18久久久久久首页狼| 婷婷激情一区| 国产一区二区在线播放| 97精品资源在线观看| 草莓视频一区| 亚洲黄页在线观看| 色噜噜色狠狠狠狠狠综合色一| 日韩一区二区三区免费播放| 美国av在线播放| 亚洲美洲欧洲综合国产一区| 黄色动漫网站入口| 免费黄网站欧美| 26uuu国产| 91看片淫黄大片一级在线观看| 久久精品—区二区三区舞蹈| 国产精品美女久久久久久2018| 疯狂试爱三2浴室激情视频| 一区二区三区色| 福利网址在线观看| 717成人午夜免费福利电影| 黄色aaa大片| 在线中文字幕日韩| 国产亚av手机在线观看| 日本不卡免费高清视频| 91成人福利社区| 精品日产一区2区三区黄免费| 成人久久电影| www.69av| 日韩中文字幕91| 无码人妻一区二区三区一| 久久综合狠狠综合| www.av免费| 一本色道久久综合亚洲aⅴ蜜桃| 一炮成瘾1v1高h| 日韩成人久久久| av中文字幕在线观看| 日本一本a高清免费不卡| 精品国产一区二区三区性色av | 女人偷人在线视频| 欧美超级免费视 在线| www.com.cn成人| 99在线影院| 欧美成免费一区二区视频| 欧美成人高潮一二区在线看| 日本aⅴ精品一区二区三区| 野战少妇38p| 中文字幕视频一区| 久久久久久少妇| 日韩美女视频在线| 91精品国产91久久久久游泳池| 国外成人在线直播| 北岛玲精品视频在线观看| 欧美激情专区| 最新日韩欧美| 午夜性福利视频| 国产精品国产三级国产aⅴ中文| 亚洲永久精品在线观看| 日韩欧美综合在线| 日本免费在线视频| 国产精品成人免费电影| 香蕉人人精品| a级黄色一级片| 国产成人无遮挡在线视频| 欧美性生给视频| 欧美日韩一区不卡| 国产一区二区影视| 日本欧美爱爱爱| 麻豆一区二区| 91免费黄视频| 国产91高潮流白浆在线麻豆 | 95在线视频| 国产99久久精品一区二区永久免费 | 亚洲在线观看av| 国产亚洲福利一区| 国产精品迅雷| 欧美日韩一区二区三区在线视频 | av成人午夜| 欧美一区二区| 古装做爰无遮挡三级聊斋艳谭| 亚洲四区在线观看| aaa国产视频| 欧美成人h版在线观看| 免费观看亚洲视频大全| 色撸撸在线观看| 国产激情精品久久久第一区二区 | 视频一区中文字幕| 欧美老熟妇乱大交xxxxx| 欧美日韩中文字幕| 男人天堂网在线观看| 国产97免费视| 欧美熟乱15p| 欧美日韩在线观看不卡| 国产精品入口麻豆原神| 91资源在线视频| 美日韩精品视频免费看| 盗摄系列偷拍视频精品tp| 国产欧美日韩网站| 91在线观看下载| 中文字幕在线天堂| 最近2019中文免费高清视频观看www99 | 精品国产亚洲一区二区三区在线| 狠狠精品干练久久久无码中文字幕| 国产高清不卡一区| 日本在线观看中文字幕| 精品调教chinesegay| 51一区二区三区| 一区二区三区四区视频在线| 国产在线不卡视频| 国产性生活网站| 亚洲欧洲美洲在线综合| 懂色aⅴ精品一区二区三区| 中文字幕一区二区中文字幕 | 国产区一区二区三区| 香蕉精品999视频一区二区| 欧美三级视频网站| 欧美一区二区三区视频| www.51av欧美视频| 亚州欧美一区三区三区在线| 国产激情精品久久久第一区二区 | 日韩中文字幕在线免费观看| 少妇精品在线| 茄子视频成人免费观看| 国产精品看片你懂得| 亚洲女同志亚洲女同女播放| 欧美最顶级的aⅴ艳星| 91成人超碰| 中文字幕在线免费看线人| 56国语精品自产拍在线观看| 国产中文在线播放| 日韩亚洲不卡在线| 国产不卡视频一区| 日韩乱码一区二区三区| 欧美高清无遮挡| 国产成人三级| 不许穿内裤随时挨c调教h苏绵| 在线视频一区二区免费| 男女在线观看视频| 日韩亚洲不卡在线| 99久久精品国产网站| 国产麻豆免费视频| 日韩69视频在线观看| 欧美久久99| 911国产在线|