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

鴻蒙動態權限申請完整規范流程和操作詳解

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

 [[404224]]

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

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

https://harmonyos.51cto.com

好久沒有寫博客了,正好今天HarmonyOS發布會,看完激動人心的發布會之后,還是覺得需要寫些東西。本來準備分享之前自己做的分布式流轉的視頻播放器的,但是分布式流轉開發內容已經有好多博主發表過了,于是搜了下社區內容,發現動態權限申請這塊的內容沒人發布,并且發現有幾篇博客的動態權限申請的代碼過于簡單存在漏洞。于是想著把這塊內容整理整理發出來。

一、權限概述

已在config.json文件中聲明的非敏感權限,非敏感權限不涉及用戶的敏感數據或危險操作,會在應用安裝時自動授予,該類權限的授權方式為系統授權(system_grant)。

敏感權限需要應用動態申請,通過運行時發送彈窗的方式請求用戶授權,該類權限的授權方式為用戶授權(user_grant)。

非敏感權限代碼編寫比較簡單,這里就不做講解。本文只講解敏感權限如何編寫代碼,即動態權限申請流程。

二、敏感權限列表

敏感權限的申請需要按照動態申請流程向用戶申請授權。

三、采用一個簡單的相冊案例演示動態權限申請開發流程

相冊需要讀取本機存儲的權限,即ohos.permission.READ_USER_STORAGE,它屬于敏感權限。

1、項目效果圖以及操作場景展示

(1)首次安裝app,用戶需要讀取相冊數據時,會彈出對話框提醒用戶授權。

點擊"允許"之后才能正常加載數據。

(2)如果點擊禁止,并且沒有勾選"禁止授權并且禁止后續再彈框提示",那么下次打開app時依然會進行彈框提示。

(3)如果點擊禁止,并且勾選了"禁止授權并且禁止后續再彈框提示",那么后續也不會再繼續彈框進行授權了,也就看不到數據。如果需要進行授權的話,需要用戶自行去系統設置中手動更改權限。此時我們應該在頁面上友好地使用toast提醒用戶去系統設置中手動更改權限。

請記住我現在描述的3種操作場景,與后續編寫代碼緊密相關,有些開發者編寫代碼一行代碼就搞定了動態授權操作,那樣的代碼只能滿足我說的第一種使用場景,后面兩種無法滿足,使用起來非常不友好。

2、代碼編寫步驟

(1)配置config.json

首先在config.json的module中添加如下配置:

  1. "reqPermissions": [ 
  2.      { 
  3.        "name""ohos.permission.READ_USER_STORAGE"
  4.        "reason""$string:permreason_storage"
  5.        "usedScene"
  6.        { 
  7.          "ability": ["com.xdw.album.MainAbility"], 
  8.          "when""always" 
  9.        } 
  10.      } 
  11.    ] 

 權限申請格式采用數組格式,可支持同時申請多個權限,權限個數最多不能超過1024個。

reqPermissions權限申請字段說明如下表

(2)編寫權限彈框觸發代碼

此步驟需要結合自己項目實際業務邏輯編寫,本相冊項目是在主頁面打開的時候就觸發了權限的申請,因此修改MainAbilitySlice代碼,在onStart的時候就去進行校驗,具體代碼如下

  1. if (verifySelfPermission("ohos.permission.READ_USER_STORAGE") != IBundleManager.PERMISSION_GRANTED) { 
  2.             // 應用未被授予權限 
  3.             if (canRequestPermission("ohos.permission.READ_USER_STORAGE")) { 
  4.                 // 是否可以申請彈框授權(首次申請或者用戶未選擇禁止且不再提示) 
  5.                 requestPermissionsFromUser( 
  6.                         new String[] { "ohos.permission.READ_USER_STORAGE" } , MY_PERMISSIONS_REQUEST_READ_USER_STORAGE); 
  7.             } else { 
  8.                 // 顯示應用需要權限的理由,提示用戶進入設置授權 
  9.                 new ToastDialog(getContext()).setText("請進入系統設置進行授權").show(); 
  10.             } 
  11.         } else { 
  12.             // 權限已被授予 
  13.             //加載顯示系統相冊中的照片 
  14.             showPhotos(); 
  15.         } 

 這斷代碼還使用到了一個自定義的常量MY_PERMISSIONS_REQUEST_READ_USER_STORAGE,需要提前定義它,代碼如下:

  1. public static final int MY_PERMISSIONS_REQUEST_READ_USER_STORAGE = 0;   //自定義的一個權限請求識別碼,用于處理權限回調 

 第一行首先調用系統方法verifySelfPermission校驗權限是否已被授予,如果未授予則調用系統方法canRequestPermission查詢該權限是否可以申請彈框授權,因為如果用戶之前如果勾選了禁止授權并且禁止后續再彈框提示,那么就不能再進行彈框授權了,此時需要toast提示引導用戶自行去系統設置中手動更改權限。如果可以申請彈框授權,則調用系統方法requestPermissionsFromUser進行彈框授權(應用上的彈框就是來自這個方法)。如果之前應用已經被授權過,則直接調用業務處理方法,這里自定義的業務處理方法是showPhotos,它的代碼請見后面完整MainAbilitySlice代碼。

此時還缺少一個在授權彈框上點擊允許授權按鈕之后的回調業務邏輯處理,該回調業務邏輯需要重寫onRequestPermissionsFromUserResult方法,而該方法是Ability類的方法,而不是AbilitySlice類的方法。因此需要在MainAbility中重寫該方法,然后在該重寫方法中調用MainAbilitySlice對象中的showPhotos方法,這個就涉及到了MainAbility與MainAbilitySlice的通信。

關于MainAbility與MainAbilitySlice的通信的具體講解請看我另外一篇博文,這里不在做詳解。

(3)編寫requestPermissionsFromUser的回調

該回調只能在Ability種進行編寫,因此修改MainAbility的代碼,核心代碼如下:

  1. @Override 
  2.    public void onRequestPermissionsFromUserResult(int requestCode, String[] permissions, int[] grantResults) { 
  3.        super.onRequestPermissionsFromUserResult(requestCode, permissions, grantResults); 
  4.        switch (requestCode) { 
  5.            case MY_PERMISSIONS_REQUEST_READ_USER_STORAGE: { 
  6.                // 匹配requestPermissions的requestCode 
  7.                if (grantResults.length > 0 
  8.                        && grantResults[0] == IBundleManager.PERMISSION_GRANTED) { 
  9.                    // 權限被授予之后做相應業務邏輯的處理 
  10.                    mainAbilitySlice.showPhotos(); 
  11.                } else { 
  12.                    // 權限被拒絕 
  13.                    new ToastDialog(getContext()).setText("權限被拒絕").show(); 
  14.                } 
  15.                return
  16.            } 
  17.        } 
  18.    } 

 這里對requestCode進行了判斷,它就是我們之前自定義的權限申請碼,用來區分我們在多個地方進行權限申請的操作,能區分每次不同請求的回調。

四、常見操作誤區

(1)只用一行簡單代碼進行動態權限申請,而沒有提前校驗權限和回調的過程

  1. requestPermissionsFromUser( 
  2.                         new String[] { "ohos.permission.READ_USER_STORAGE" } , MY_PERMISSIONS_REQUEST_READ_USER_STORAGE); 

 這種情況就會出現萬一有一次禁止了權限,后面就不會顯示相冊數據并且沒人任何提示,影響用戶體驗。

(2)canRequestPermission代碼邏輯沒有編寫

該邏輯代碼不編寫,就會出現用戶點擊了"禁止授權并且禁止后續再彈框提示",然后進入頁面就不會顯示相冊數據并且沒人任何提示,影響用戶體驗。

因此,為了加強用戶體驗,請不要省略上述動態權限申請的代碼編寫流程。

五、完整代碼

MainAbilitySlice的代碼如下:

  1. package com.xdw.album.slice; 
  2.  
  3. import com.xdw.album.MainAbility; 
  4. import com.xdw.album.ResourceTable; 
  5. import ohos.aafwk.ability.AbilitySlice; 
  6. import ohos.aafwk.ability.DataAbilityHelper; 
  7. import ohos.aafwk.ability.DataAbilityRemoteException; 
  8. import ohos.aafwk.content.Intent; 
  9. import ohos.agp.components.Component; 
  10. import ohos.agp.components.Image; 
  11. import ohos.agp.components.TableLayout; 
  12. import ohos.agp.components.Text; 
  13. import ohos.agp.window.dialog.ToastDialog; 
  14. import ohos.bundle.IBundleManager; 
  15. import ohos.data.resultset.ResultSet; 
  16. import ohos.hiviewdfx.HiLog; 
  17. import ohos.hiviewdfx.HiLogLabel; 
  18. import ohos.media.image.ImageSource; 
  19. import ohos.media.image.PixelMap; 
  20. import ohos.media.image.common.Size
  21. import ohos.media.photokit.metadata.AVStorage; 
  22. import ohos.utils.net.Uri; 
  23.  
  24. import java.io.FileDescriptor; 
  25. import java.io.FileNotFoundException; 
  26. import java.util.ArrayList; 
  27.  
  28. public class MainAbilitySlice extends AbilitySlice { 
  29.     private static final String TAG = "MainAbilitySlice"
  30.     private static final HiLogLabel LABEL = new HiLogLabel(HiLog.DEBUG, 0, "TAG"); 
  31.     public static final int MY_PERMISSIONS_REQUEST_READ_USER_STORAGE = 0;   //自定義的一個權限請求識別碼,用于處理權限回調 
  32.     private TableLayout tlAlbum;    //定義表格布局,用來加載圖片控件 
  33.     private Text textLoading, textNum;  //定義正在加載文本,照片數量顯示文本 
  34.  
  35.     @Override 
  36.     public void onStart(Intent intent) { 
  37.         super.onStart(intent); 
  38.         super.setUIContent(ResourceTable.Layout_ability_main); 
  39.         MainAbility mainAbility = (MainAbility) getAbility(); 
  40.         mainAbility.setMainAbilitySlice(this); 
  41.         initView(); 
  42.         if (verifySelfPermission("ohos.permission.READ_USER_STORAGE") != IBundleManager.PERMISSION_GRANTED) { 
  43.             // 應用未被授予權限 
  44.             if (canRequestPermission("ohos.permission.READ_USER_STORAGE")) { 
  45.                 // 是否可以申請彈框授權(首次申請或者用戶未選擇禁止且不再提示) 
  46.                 requestPermissionsFromUser( 
  47.                         new String[] { "ohos.permission.READ_USER_STORAGE" } , MY_PERMISSIONS_REQUEST_READ_USER_STORAGE); 
  48.             } else { 
  49.                 // 顯示應用需要權限的理由,提示用戶進入設置授權 
  50.                 new ToastDialog(getContext()).setText("請進入系統設置進行授權").show(); 
  51.             } 
  52.         } else { 
  53.             // 權限已被授予 
  54.             //加載顯示系統相冊中的照片 
  55.             showPhotos(); 
  56.         } 
  57.     } 
  58.  
  59.     @Override 
  60.     public void onActive() { 
  61.         super.onActive(); 
  62.     } 
  63.  
  64.     @Override 
  65.     public void onForeground(Intent intent) { 
  66.         super.onForeground(intent); 
  67.     } 
  68.  
  69.     private void initView() { 
  70.         //初始化相關UI組件 
  71.         tlAlbum = (TableLayout) findComponentById(ResourceTable.Id_tl_album); 
  72.         tlAlbum.setColumnCount(3);  //表格設置成3列 
  73.         textLoading = (Text) findComponentById(ResourceTable.Id_text_loading); 
  74.         textNum = (Text) findComponentById(ResourceTable.Id_text_num); 
  75.     } 
  76.  
  77.     //定義加載顯示圖片的方法 
  78.     public void showPhotos() { 
  79.         //先移除之前的表格布局中的所有組件 
  80.         tlAlbum.removeAllComponents(); 
  81.         //定義一個數組,用來存放圖片的id,它的size就是照片數量 
  82.         ArrayList<Integer> img_ids = new ArrayList<Integer>(); 
  83.         //初始化DataAbilityHelper,用來獲取系統共享數據 
  84.         DataAbilityHelper helper = DataAbilityHelper.creator(getContext()); 
  85.         try { 
  86.             //讀取系統相冊的數據 
  87.             ResultSet result = helper.query(AVStorage.Images.Media.EXTERNAL_DATA_ABILITY_URI, nullnull); 
  88.             //根據獲取的數據覺得“正在加載”提示是否顯示 
  89.             if (result == null) { 
  90.                 textLoading.setVisibility(Component.VISIBLE); 
  91.             } else { 
  92.                 textLoading.setVisibility(Component.HIDE); 
  93.             } 
  94.             //遍歷獲取的數據,來動態加載表格布局中的圖片組件 
  95.             while (result != null && result.goToNextRow()) { 
  96.                 //從獲取的數據中讀取圖片的id 
  97.                 int mediaId = result.getInt(result.getColumnIndexForName(AVStorage.Images.Media.ID)); 
  98.                 //生成uri,后面會根據uri獲取文件 
  99.                 Uri uri = Uri.appendEncodedPathToUri(AVStorage.Images.Media.EXTERNAL_DATA_ABILITY_URI, "" + mediaId); 
  100.                 //獲取文件信息 
  101.                 FileDescriptor filedesc = helper.openFile(uri, "r"); 
  102.                 //定義一個圖片編碼參數選項用于設置相關編碼參數 
  103.                 ImageSource.DecodingOptions decodingOpts = new ImageSource.DecodingOptions(); 
  104.                 decodingOpts.desiredSize = new Size(300, 300); 
  105.                 //根據文件信息生成pixelMap對象,該對象是設置Image組件的關鍵api 
  106.                 ImageSource imageSource = ImageSource.create(filedesc, null); 
  107.                 PixelMap pixelMap = imageSource.createThumbnailPixelmap(decodingOpts, true); 
  108.                 //構造一個圖片組件并且設置相關屬性 
  109.                 Image img = new Image(MainAbilitySlice.this); 
  110.                 img.setId(mediaId); 
  111.                 img.setHeight(300); 
  112.                 img.setWidth(300); 
  113.                 img.setMarginTop(20); 
  114.                 img.setMarginLeft(20); 
  115.                 img.setPixelMap(pixelMap); 
  116.                 img.setScaleMode(Image.ScaleMode.ZOOM_CENTER); 
  117.                 //在表格布局中加載圖片組件 
  118.                 tlAlbum.addComponent(img); 
  119.                 HiLog.info(LABEL, "uri=" + uri); 
  120.                 img_ids.add(mediaId); 
  121.             } 
  122.         } catch (DataAbilityRemoteException | FileNotFoundException e) { 
  123.             e.printStackTrace(); 
  124.         } 
  125.         //完成照片數量的刷新,如果沒有照片,則在UI中顯示“沒有照片”的文本 
  126.         if (img_ids.size() > 0) { 
  127.             textLoading.setVisibility(Component.HIDE); 
  128.             textNum.setVisibility(Component.VISIBLE); 
  129.             textNum.setText("照片數量:" + img_ids.size()); 
  130.         } else { 
  131.             textLoading.setVisibility(Component.VISIBLE); 
  132.             textLoading.setText("沒有照片"); 
  133.             textNum.setVisibility(Component.HIDE); 
  134.         } 
  135.     } 
  136.  

 復制MainAbility的代碼如下:

  1. package com.xdw.album; 
  2.  
  3. import com.xdw.album.slice.MainAbilitySlice; 
  4. import ohos.aafwk.ability.Ability; 
  5. import ohos.aafwk.content.Intent; 
  6. import ohos.agp.window.dialog.ToastDialog; 
  7. import ohos.bundle.IBundleManager; 
  8.  
  9. import static com.xdw.album.slice.MainAbilitySlice.MY_PERMISSIONS_REQUEST_READ_USER_STORAGE; 
  10.  
  11. public class MainAbility extends Ability { 
  12.     private MainAbilitySlice mainAbilitySlice; 
  13.     @Override 
  14.     public void onStart(Intent intent) { 
  15.         super.onStart(intent); 
  16.         super.setMainRoute(MainAbilitySlice.class.getName()); 
  17.     } 
  18.  
  19.     @Override 
  20.     public void onRequestPermissionsFromUserResult(int requestCode, String[] permissions, int[] grantResults) { 
  21.         super.onRequestPermissionsFromUserResult(requestCode, permissions, grantResults); 
  22.         switch (requestCode) { 
  23.             case MY_PERMISSIONS_REQUEST_READ_USER_STORAGE: { 
  24.                 // 匹配requestPermissions的requestCode 
  25.                 if (grantResults.length > 0 
  26.                         && grantResults[0] == IBundleManager.PERMISSION_GRANTED) { 
  27.                     // 權限被授予之后做相應業務邏輯的處理 
  28.                     mainAbilitySlice.showPhotos(); 
  29.                 } else { 
  30.                     // 權限被拒絕 
  31.                     new ToastDialog(getContext()).setText("權限被拒絕").show(); 
  32.                 } 
  33.                 return
  34.             } 
  35.         } 
  36.     } 
  37.  
  38.  
  39.     public MainAbilitySlice getMainAbilitySlice() { 
  40.         return mainAbilitySlice; 
  41.     } 
  42.  
  43.     public void setMainAbilitySlice(MainAbilitySlice mainAbilitySlice) { 
  44.         this.mainAbilitySlice = mainAbilitySlice; 
  45.     } 

 復制布局文件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.     <Text 
  9.         ohos:id="$+id:text_loading" 
  10.         ohos:height="match_parent" 
  11.         ohos:width="match_parent" 
  12.         ohos:text="正在打開..." 
  13.         ohos:text_alignment="center" 
  14.         ohos:text_size="45fp"></Text> 
  15.  
  16.     <ScrollView 
  17.         ohos:height="600vp" 
  18.         ohos:width="match_parent" 
  19.         ohos:left_padding="25vp" 
  20.         > 
  21.  
  22.         <TableLayout 
  23.             ohos:id="$+id:tl_album" 
  24.             ohos:height="match_content" 
  25.             ohos:width="match_parent" 
  26.             > 
  27.  
  28.         </TableLayout> 
  29.     </ScrollView> 
  30.  
  31.     <Text 
  32.         ohos:id="$+id:text_num" 
  33.         ohos:height="match_content" 
  34.         ohos:width="match_content" 
  35.         ohos:text_alignment="center" 
  36.         ohos:text_size="20fp"></Text> 
  37.  
  38. </DirectionalLayout> 

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

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

https://harmonyos.51cto.com

 

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

2015-12-30 10:29:40

Git協作流程詳解

2024-07-09 08:48:38

2009-10-13 08:55:50

布線系統操作規范

2012-04-28 14:23:57

IDP

2023-12-06 08:23:44

代理模式設計模式

2015-08-06 10:28:24

git規范流程

2023-10-20 14:16:24

ArkUI動態申請授權

2012-06-14 13:45:23

頂級域名域名gTLD

2022-03-07 16:46:03

HarmonyOS鴻蒙操作系統

2021-09-13 06:43:36

UPS電源安裝

2023-04-18 08:52:35

模塊Python

2020-09-16 19:30:29

內存

2019-11-07 14:46:09

數據庫MySQL命令

2009-11-19 17:18:30

靜態路由動態路由

2021-07-06 06:26:43

動態計算圖GPU深度學習

2021-08-10 20:41:33

AndroidApp流程

2021-07-06 06:39:22

Java靜態代理動態代理

2025-08-07 06:00:00

2009-09-01 10:37:51

C#項目代碼C#代碼規范

2010-01-05 09:35:07

.Net Framew
點贊
收藏

51CTO技術棧公眾號

亚洲人成网站777色婷婷| 国产精品不卡视频| 97超碰国产精品女人人人爽| 国产精品果冻传媒| 深夜av在线| 日本一区二区视频在线| 91欧美视频网站| 日本在线视频免费观看| 精品香蕉视频| 欧美夫妻性生活| 9色porny| 麻豆影视在线| 久久超碰97中文字幕| 欧美黑人巨大精品一区二区| 国产吞精囗交久久久| 国产三级一区| 精品露脸国产偷人在视频| 日韩av高清| 超碰在线观看99| 久久一二三四| 久久久久久成人| 国产在线观看免费视频软件| 视频一区中文字幕精品| 欧美羞羞免费网站| 成人黄色av片| a级影片在线观看| 2021中文字幕一区亚洲| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产香蕉视频在线| 久久久久久久久国产一区| 日韩精品免费在线视频| 色一情一区二区三区| 午夜久久中文| 亚洲夂夂婷婷色拍ww47| 亚洲精品日韩成人| 日色在线视频| 成人午夜又粗又硬又大| 国产在线不卡精品| 国产99免费视频| 亚洲经典三级| 欧美激情视频在线| 欧美肥妇bbwbbw| 加勒比久久综合| 日韩电影大片中文字幕| 日韩欧美理论片| 久久影视精品| 91久久一区二区| 欧美三级在线观看视频| 性欧美1819sex性高清大胸| 日本一区二区三区久久久久久久久不 | 青青久久av北条麻妃海外网| 九九九在线视频| 亚洲一级毛片| 日韩一级裸体免费视频| 国产精品久久久久久成人| 亚洲区小说区| 亚洲欧美另类人妖| 亚洲国产精品成人综合久久久| 日韩视频一二区| 欧美一区三区四区| 日韩av加勒比| 国产一精品一av一免费爽爽| 欧美精品乱人伦久久久久久| 国产精品久久久毛片| 欧美影视资讯| 欧美系列在线观看| 中文字幕视频在线免费观看| 蜜桃视频成人m3u8| 欧美日韩中文精品| 国产免费又粗又猛又爽| 福利一区二区| 欧美精品三级日韩久久| 亚洲一区二区偷拍| 日韩成人视屏| 亚洲成人中文字幕| 少妇毛片一区二区三区| 妖精视频一区二区三区免费观看| 国产一区二区日韩精品欧美精品| 我想看黄色大片| 97国产成人高清在线观看| 久久久精品欧美| 黄色一级片在线免费观看| 欧美日韩一区二区国产| 性色av一区二区咪爱| 色一情一乱一伦| 日韩成人免费电影| 91麻豆桃色免费看| 蜜臀av在线观看| 久久精品视频免费观看| 亚洲一区二区高清视频| 深夜国产在线播放| 黑人巨大精品欧美一区二区三区| 超碰97人人射妻| 日韩国产大片| 亚洲成av人乱码色午夜| 自拍视频一区二区| 久久精品高清| 欧美激情亚洲视频| 亚洲综合久久网| 精品亚洲成a人| 国产无套精品一区二区| 国产毛片av在线| 有坂深雪av一区二区精品| 国产青青在线视频| 日韩护士脚交太爽了| 亚洲成人激情在线| 亚洲黄色网址大全| 亚洲大胆在线| 国产有码一区二区| 四虎在线免费观看| 国产精品国产精品国产专区不蜜 | 无遮挡的视频在线观看| 亚洲精品成人精品456| 男人日女人下面视频| 日韩伦理一区二区| 日韩成人在线视频观看| 91精品国产闺蜜国产在线闺蜜| 999亚洲国产精| 91精品久久久久久久久久入口 | 国产高清视频一区| 日韩av一区二区三区在线| 激情av在线| 欧美日韩一区在线| 国产网站无遮挡| 艳女tv在线观看国产一区| 日本久久久久亚洲中字幕| 成人1区2区3区| 国产精品久久久久影院老司| 成人在线免费在线观看| 深夜福利一区| 色悠悠国产精品| 在线能看的av| 成人午夜碰碰视频| 欧美日韩中文字幕在线播放| 国产一区一一区高清不卡| 日韩精品小视频| 久久久久久久久99| 国产一区二区三区不卡在线观看| 日韩亚洲一区在线播放| 成人免费看视频网站| 亚洲成人999| 欧美精品久久久久性色| 久久99精品国产麻豆婷婷洗澡| 区一区二区三区中文字幕| 17videosex性欧美| 亚洲风情亚aⅴ在线发布| 五月天激情丁香| 久久国产精品99久久人人澡| 先锋影音一区二区三区| 欧美xxxxxx| 国产视频丨精品|在线观看| 99久在线精品99re8热| 福利电影一区二区三区| 久久亚洲a v| swag国产精品一区二区| 欧美激情视频在线| 天堂av资源在线| 亚洲不卡av一区二区三区| 9.1在线观看免费| 极品av少妇一区二区| 大波视频国产精品久久| 草美女在线观看| 亚洲国产成人在线视频| 久久露脸国语精品国产91| 99久久精品国产观看| 欧美 国产 综合| 五月天亚洲一区| 青青草国产精品一区二区| 精品亚洲综合| 欧美专区日韩专区| 男女男精品视频网站| 经典三级在线一区| 在线观看污视频| caoporn成人| 欧美亚洲成人xxx| av在线播放网站| 99热在线成人| 亚洲电影激情视频网站| 伊人网综合视频| 亚欧美中日韩视频| 视频在线精品一区| 国产精品视频一区视频二区 | 波多野结衣在线高清| 亚洲国产黄色片| 波多野结衣大片| 最新国产の精品合集bt伙计| 国产精品99精品无码视亚| 一区二区国产精品| 日韩欧美在线观看强乱免费| 24小时成人在线视频| 欧美激情精品久久久久久免费印度| 天天干,夜夜操| 欧美性猛片aaaaaaa做受| 亚洲波多野结衣| 不卡视频免费播放| 亚洲一区在线不卡| 黑人一区二区| 五码日韩精品一区二区三区视频| 国产精品一区免费在线 | 一区二区三区在线视频111| 国产一区二区三区精品在线观看| 国外成人在线直播| 看电影就来5566av视频在线播放| 欧美久久久久久久久中文字幕| 青春草免费视频| 久久久99免费| 农村末发育av片一区二区| 久久av在线| 欧美性猛交内射兽交老熟妇| 国产精品一区高清| 亚洲综合中文字幕68页| 粉嫩一区二区| 欧美高清不卡在线| 91精品专区| 日韩精品一二三四区| av网站在线观看免费| 色狠狠综合天天综合综合| 免费一级片在线观看| 欧美国产日韩精品免费观看| 91九色蝌蚪porny| 激情综合网天天干| 男人的天堂99| 激情成人综合| 欧美性受xxxx黑人猛交88| 蜜臀久久99精品久久一区二区| 99国产超薄肉色丝袜交足的后果| 欧美性片在线观看| 91国产一区在线| 手机av免费在线| 久久五月情影视| 97在线观看免费观看高清 | 欧美色道久久88综合亚洲精品| 黄色香蕉视频在线观看| 久久久亚洲综合| 国产草草浮力影院| 国产成人av一区| 欧美又黄又嫩大片a级| 奇米精品一区二区三区在线观看| 免费国产a级片| 亚洲视频免费| www.夜夜爱| 欧美激情性爽国产精品17p| 宅男av一区二区三区| 国产在视频线精品视频www666| 国产一区在线观| 极品尤物一区| 国产精品免费一区二区三区| 久久视频免费| 亚洲影视中文字幕| 免费看一区二区三区| 成人午夜在线观看| 国产精品亚洲综合在线观看| 国产日本欧美在线观看| 欧美高清免费| 成人福利视频网| 久久夜夜久久| 亚洲一区久久久| 国产一区二区三区亚洲综合| 亚洲自拍另类欧美丝袜| 欧美成年网站| 国产成人成网站在线播放青青 | 久久青青草原| 日本在线中文字幕一区| 久热这里只精品99re8久| 曰本一区二区三区视频| 青青草原亚洲| 91麻豆精品国产91久久久平台| 一本色道久久99精品综合| 99久久99久久精品国产片桃花| 在线播放 亚洲| 欧美不卡高清| 国产毛片视频网站| 老司机一区二区三区| wwwwww.色| 精品一区二区三区免费毛片爱| 日本少妇激三级做爰在线| 国产乱人伦偷精品视频免下载| 久久久久亚洲av片无码v| 国产v综合v亚洲欧| 免费看黄色aaaaaa 片| 国产欧美一区二区三区沐欲| 亚洲伦理一区二区三区| 亚洲综合图片区| av资源免费观看| 欧美亚洲禁片免费| 国产人妖一区二区| 亚洲国产天堂久久国产91| 国产综合在线观看| 久久成人综合视频| 一个人看的www视频在线免费观看| 国产精品大片wwwwww| 国产不卡精品在线| 狠狠干一区二区| 日韩欧美一区二区三区免费看| 国产情侣第一页| 日韩精品亚洲一区| www.色.com| 久久久午夜电影| 欧美成人精品激情在线视频| 日韩欧美高清在线视频| 国产精品一区二区三区在线免费观看| 日韩久久精品一区| 成年女人的天堂在线| 欧美激情影音先锋| 国产电影一区二区三区爱妃记| av在线不卡一区| 日韩av久操| 给我免费播放片在线观看| 美女视频黄久久| 国产福利在线观看视频| 国产精品久久久爽爽爽麻豆色哟哟| jizz国产免费| 欧美精品色综合| 国产对白叫床清晰在线播放| 欧美二区在线播放| 99久久亚洲国产日韩美女| 国产区二精品视| 亚洲精品一二三区区别| 日韩av在线综合| 成人黄色国产精品网站大全在线免费观看 | 一本一道久久a久久精品逆3p| 欧美性爽视频| 91九色国产在线| 精品视频亚洲| 凹凸日日摸日日碰夜夜爽1| 高清av一区二区| 一起操在线播放| 欧洲视频一区二区| 青青草视频在线观看| 欧美精品福利视频| 国产精品一区三区在线观看| 伊人色综合久久天天五月婷| 老司机精品久久| 黄色片视频免费观看| 亚洲在线视频网站| 国产成人免费看一级大黄| 中文字幕日韩在线观看| 色香欲www7777综合网| 麻豆av一区| 99日韩精品| 国产草草浮力影院| 亚洲成人免费观看| 丰满少妇高潮在线观看| 久久天天躁狠狠躁夜夜躁| 99国内精品久久久久| 一个色的综合| 老司机免费视频一区二区| 黄大色黄女片18免费| 一本一道波多野结衣一区二区| 亚洲色图欧美视频| 97香蕉超级碰碰久久免费软件 | 久久91精品国产91久久小草| av手机在线播放| 在线视频亚洲一区| 91精品国产91久久久久游泳池 | www.神马久久| 欧美黄网在线观看| 成人午夜看片网址| 国产精选第一页| 日韩电影免费在线观看中文字幕 | 五月激情六月综合| 性感美女视频一二三| 欧美一区深夜视频| 蜜臀91精品国产高清在线观看| 日本美女高潮视频| 国产精品午夜电影| 97久久人国产精品婷婷| 欧美另类高清videos| 91精品啪在线观看国产爱臀| 野外做受又硬又粗又大视频√| 岛国一区二区三区| 久久久久久久久影院| 亚洲人成绝费网站色www| 成人在线视频播放| 韩国黄色一级大片| 处破女av一区二区| 手机在线看片1024| 日韩中文av在线| 97久久亚洲| 毛片av免费在线观看| 国产精品入口麻豆九色| 国产乱色精品成人免费视频| 欧美极品少妇xxxxⅹ免费视频| 秋霞影院一区二区三区| 国产又黄又猛又粗又爽的视频| 中文字幕亚洲欧美在线不卡| 亚洲第一第二区| 国产成人精品网站| 91精品国产91久久综合| av鲁丝一区鲁丝二区鲁丝三区| 91福利在线免费观看| 成人在线观看亚洲| 久久国产精品久久| 久久精品免费观看| 国产午夜久久久| 亚洲天堂男人天堂女人天堂| 精品网站999| 国产xxxxx在线观看| 亚洲人成亚洲人成在线观看图片| 免费av网站在线播放|