精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧美 丝袜 自拍 制服 另类| 国产区精品视频| 不许穿内裤随时挨c调教h苏绵| 欧美不卡视频在线观看| 亚洲国产网址| 337p亚洲精品色噜噜噜| 五十路熟女丰满大屁股| 99se视频在线观看| 国产福利一区二区三区| 欧美一级免费看| 国产又粗又硬又长又爽| 卡通动漫国产精品| 欧美日韩精品专区| 欧美在线观看www| 麻豆传媒在线观看| 日本大胆欧美| 好看的av在线不卡观看| 884aa四虎影成人精品一区| www.日本在线播放| 国外av在线| 国产成人午夜高潮毛片| 国产精品第一视频| 国产一级精品视频| 欧美人成网站| 日韩在线观看免费av| 中文字幕一区二区人妻在线不卡| 暖暖在线中文免费日本| 欧美极品另类videosde| 国产日韩精品一区观看| 国产乱淫片视频| 日本不卡一二三区黄网| 91成人免费观看网站| 久草成人在线视频| 久久久久电影| 爽爽爽爽爽爽爽成人免费观看| 国产v亚洲v天堂无码久久久 | 91麻豆精品国产91久久综合| www.豆豆成人网.com| 欧美精品一级二级| 国产精品v日韩精品v在线观看| 巨大荫蒂视频欧美另类大| 久久蜜臀精品av| 精品中文字幕一区| 天堂在线视频观看| 成人短视频下载| 成人免费看片网站| 午夜精品久久久久久久99热黄桃| 亚洲视频免费| 欧美黑人性视频| 一级黄色录像视频| 欧美在线免费一级片| 理论片在线不卡免费观看| 成人欧美一区二区三区黑人一| 亚洲天堂av资源在线观看| 欧美精品tushy高清| 久久夜色精品国产亚洲aⅴ| 最新视频 - x88av| 在线观看的av| 国产精品久久福利| 中日韩在线视频| 日本综合在线| 国产精品久久久久久户外露出| 91入口在线观看| 99热这里只有精品3| 精品一区二区三区蜜桃| 成人夜晚看av| 一级黄色片免费| 久草这里只有精品视频| 91九色视频在线| a网站在线观看| 粉嫩av亚洲一区二区图片| 99视频在线免费观看| 黑人操亚洲女人| 91影院在线免费观看| 久久久久久99| 国产毛片av在线| 综合欧美一区二区三区| 国产黄色激情视频| 午夜影院在线播放| 日本高清不卡视频| 九九九九九九九九| 北条麻妃一区二区三区在线观看 | 色婷婷综合久久久久久| 国产婷婷97碰碰久久人人蜜臀| 激情久久综合网| 韩国三级成人在线| 亚洲国产成人爱av在线播放| 加勒比综合在线| 久久精品影视| 97精品一区二区三区| 欧美日韩一级黄色片| 久久精品免费看| 国产精品久久九九| yiren22综合网成人| 亚洲精品视频在线| 国产高清精品在线观看| 在线视频成人| 在线看成人短视频| 欧美精品一区二区久久久| 巨胸大乳www视频免费观看| 99精品小视频| 欧美一级电影在线| a网站在线观看| 久久久美女毛片| 国产91视频一区| 免费亚洲电影| 精品国内二区三区| 国产99在线 | 亚洲| 亚洲人成在线影院| 成人久久精品视频| 国产小视频在线| 亚洲综合成人在线视频| 亚洲国产高清av| 久久悠悠精品综合网| 久久精品影视伊人网| 四虎精品永久在线| 国产精品1区2区| 亚洲精品久久久久久一区二区| 欧美天堂在线视频| 中文字幕在线免费不卡| 男女激情无遮挡| 国产一区二区av在线| 亚洲一区二区黄| 国产无套粉嫩白浆内谢| 激情深爱一区二区| 日韩国产伦理| 九色porny自拍视频在线观看| 精品久久香蕉国产线看观看gif| 国产精品久久久久9999爆乳| 九九九精品视频| 亚洲精品永久免费| 日韩成人高清视频| 东方aⅴ免费观看久久av| 亚洲欧洲精品一区二区| 3d欧美精品动漫xxxx无尽| 亚洲国产精品一区二区久| 色婷婷在线视频观看| 麻豆专区一区二区三区四区五区| 91美女片黄在线观| 91精品专区| 欧美三级日韩三级国产三级| 小早川怜子久久精品中文字幕| 日本电影一区二区| 国产999精品久久久影片官网| 欧美另类高清videos的特点| 26uuu亚洲综合色| 国产精品后入内射日本在线观看| 日韩精品三区| 亚洲欧美精品中文字幕在线| 四虎永久在线精品| 成人福利视频在线| 3d动漫一区二区三区| 久久99国产精品久久99大师| 国模精品视频一区二区| 国模私拍视频在线| 午夜精品一区二区三区免费视频 | 男女男精品视频| 国产一区自拍视频| 热三久草你在线| 亚洲美女黄色片| 成人免费视频国产免费| 国产亚洲女人久久久久毛片| 三级a在线观看| 色天天综合网| 91老司机在线| 久草在线视频福利| 亚洲国产中文字幕久久网| 欧美三级一区二区三区| 久久无码av三级| 九色porny91| 999视频精品| av一区二区三区四区电影| 狂野欧美性猛交xxxxx视频| 亚洲高清福利视频| 亚洲另类在线观看| 国产精品久久三| 欧洲成人午夜精品无码区久久| 成人免费a**址| 成人综合网网址| 3344国产永久在线观看视频| 亚洲欧美在线免费观看| 一级黄色大毛片| 亚洲香蕉伊在人在线观| free性中国hd国语露脸| 免费观看一级特黄欧美大片| 男女激烈动态图| 色愁久久久久久| 成人欧美一区二区三区黑人孕妇| 91在线视频| 日韩精品资源二区在线| 国产成人一区二区三区影院在线| 高清不卡一区二区在线| 欧美牲交a欧美牲交aⅴ免费真| 97成人在线| 欧美中文字幕第一页| 77导航福利在线| 亚洲国产日韩精品在线| 伊人免费在线观看高清版| 亚洲一区二区三区在线看| 亚洲第一综合网| 国产成人av电影在线观看| 国产成人av影视| 欧美精品首页| 午夜一区二区三区| 精品国产导航| 亚洲www视频| 日本免费一区二区三区四区| 欧美日韩国产成人在线| a视频网址在线观看| 精品99一区二区三区| 亚洲专区第一页| 日韩欧美在线一区| 久久婷婷综合国产| 国产精品久久精品日日| 亚洲av无码一区二区二三区| 国产乱理伦片在线观看夜一区| 91精品国产吴梦梦| 精品久久久久久久久久久aⅴ| 国产精品第100页| 欧美xxxbbb| 少妇高潮久久77777| 天堂a中文在线| 日韩欧美色综合网站| 久久精品五月天| 欧美日韩国产一区在线| 青青草国产在线观看| 中文字幕日韩精品一区 | 国产乱码精品一区二区三区亚洲人 | 国产精品久久久久国产精品日日| av免费一区二区| 久久精品1区| 免费在线观看亚洲视频| 欧美成人一区二免费视频软件| 国产激情一区二区三区在线观看 | 国产激情999| 国产乱码精品一区二三赶尸艳谈| 亚洲精品资源美女情侣酒店| 成人爽a毛片一区二区| 欧美一区二区三区在线视频 | 日本高清无吗v一区| 中文字幕一区二区三区精品| 亚洲五码中文字幕| 国产一二三四在线| 亚洲精品成人精品456| 可以免费看av的网址| 国产精品久久久久三级| 亚洲色图 激情小说| 国产精品欧美一区二区三区| 免费看的黄色网| 国产日产欧美一区二区视频| 国产精品密蕾丝袜| 日本一区二区三区四区 | 中文字幕第315页| 色婷婷久久久久swag精品| 97免费在线观看视频| 精品国产乱码久久久久久婷婷 | 91日韩在线| 翔田千里亚洲一二三区| 精品视频免费| 中文字幕一区二区三区精彩视频| 曰本一区二区三区视频| 欧美一区二区三区四区五区六区 | 日韩一区二区三区高清免费看看| 天天操天天摸天天干| 欧美性猛交xxxx乱大交蜜桃| 黄色污污网站在线观看| 日本道免费精品一区二区三区| 欧美成人一区二区三区高清| 亚洲午夜国产一区99re久久| 97久久久久久久| 91国偷自产一区二区使用方法| 精品午夜福利视频| 午夜国产一区二区| 日韩美女视频免费看| 忘忧草在线影院两性视频| 日本免费在线精品| 久久精品超碰| 99国产超薄肉色丝袜交足的后果| 在线成人视屏| 91久久国产精品91久久性色| 超碰成人在线免费| 日韩欧美精品一区二区| 欧美wwwww| 中文字幕无码精品亚洲资源网久久| 亚洲免费二区| 成人性免费视频| 日韩影院在线观看| 国产91在线免费观看| www欧美成人18+| 欧美色图17p| 亚洲不卡在线观看| 亚洲综合精品国产一区二区三区| 欧美在线制服丝袜| www.com在线观看| 亚洲人在线视频| 亚洲电影视频在线| 国产成人精品综合| 亚洲日本va| 午夜精品亚洲一区二区三区嫩草| 久久99国产精一区二区三区| 异国色恋浪漫潭| 国产精品日本| 亚洲av毛片在线观看| 久久亚洲私人国产精品va媚药| 国产黄色三级网站| 亚洲欧洲成人av每日更新| 永久免费看片在线播放| 欧美日韩美女一区二区| 日本一区高清| 色综合久久久888| 激情久久一区二区| 久久精品日产第一区二区三区精品版 | 一本到不卡精品视频在线观看| 国产一级特黄aaa大片| 欧美三级视频在线播放| 视频一区二区在线播放| 日韩亚洲精品电影| sis001亚洲原创区| 国产精品一区二区三| 蜜臀av免费一区二区三区| 亚洲人成无码网站久久99热国产 | 亚洲天堂国产视频| 91网站在线观看视频| 九九热精彩视频| 69堂国产成人免费视频| 成av人电影在线观看| 奇门遁甲1982国语版免费观看高清| 精品无人乱码一区二区三区| 国产亚洲自拍偷拍| 欧美日韩免费观看一区=区三区| 蜜臀av色欲a片无码精品一区 | 亚洲激情自拍视频| 中文字幕人妻一区二区在线视频| 4438x成人网最大色成网站| 国产精品一二三区视频| 欧美一区在线直播| 久久久久久久久久久久久久久久久久久久 | 九色91av视频| 电影91久久久| 久久免费看毛片| 久久国产福利国产秒拍| 少妇高潮惨叫久久久久| 欧美日韩一区二区三区四区| 国产一区精品| 国产精品免费一区| 日韩精品1区| 最新国产黄色网址| 中文字幕亚洲成人| 国产孕妇孕交大片孕| 色一区av在线| 91精品网站在线观看| 手机福利在线视频| 国产在线精品免费| 国产极品国产极品| 欧美成人精精品一区二区频| 日日夜夜天天综合入口| 成人免费视频观看视频| 激情欧美丁香| 538国产视频| 一本色道久久加勒比精品| 黄色软件在线观看| 国产美女精彩久久| 中文字幕日韩一区二区不卡| 蜜桃色一区二区三区| 午夜久久福利影院| 精品美女视频在线观看免费软件| 欧美激情视频免费观看| 成人资源在线播放| 国产a级一级片| 国产欧美一区在线| 国产精品探花视频| 九九热精品视频| 任你躁在线精品免费| 黄色三级视频片| 亚洲欧美日韩一区二区三区在线观看| 在线永久看片免费的视频| 这里只有精品在线播放| 成人看片毛片免费播放器| 国产91av视频在线观看| 成人午夜激情影院| 亚洲中文一区二区| 美女久久久久久久| 欧美1区二区| 久久人人爽av| 亚洲不卡在线观看| 日本在线观看视频| 国产伦精品一区二区三区免| 热久久免费视频| 国产在线拍揄自揄拍无码视频| 欧美一级欧美三级| 小视频免费在线观看| 亚洲v欧美v另类v综合v日韩v| 国产精品试看| 黄色裸体一级片| 日韩av网址在线| 日韩电影免费观看高清完整版在线观看 | 日本视频www色| 欧美精品做受xxx性少妇| 婷婷综合一区| 免费高清视频在线观看|