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

Android截屏與WebView長圖分享經(jīng)驗總結

移動開發(fā) Android
最近在做新業(yè)務需求的同時,我們在 Android 上遇到了一些之前沒有碰到過的問題,截屏分享、 WebView 生成長圖以及長圖在各個分享渠道分享時圖片模糊甚至分享失敗等問題,在這過程中踩了很多坑,到目前為止絕大部分的問題都還算是有了比較滿意的解決方案。

最近在做新業(yè)務需求的同時,我們在 Android 上遇到了一些之前沒有碰到過的問題,截屏分享、 WebView 生成長圖以及長圖在各個分享渠道分享時圖片模糊甚至分享失敗等問題,在這過程中踩了很多坑,到目前為止絕大部分的問題都還算是有了比較滿意的解決方案。以下就從三個方面來總結一下過程中遇到的挑戰(zhàn)和***的解決方案。

一、概述

最近在做新業(yè)務需求的同時,我們在 Android 上遇到了一些之前沒有碰到過的問題,截屏分享、 WebView 生成長圖以及長圖在各個分享渠道分享時圖片模糊甚至分享失敗等問題,在這過程中踩了很多坑,到目前為止絕大部分的問題都還算是有了比較滿意的解決方案。以下就從三個方面來總結一下過程中遇到的挑戰(zhàn)和***的解決方案。

Android截屏與WebView長圖分享經(jīng)驗總結

二、截圖分享

在 Android 原生系統(tǒng)中是沒有提供截圖的廣播或者監(jiān)聽事件的,也就是說代碼層面無法獲知用戶的截屏操作,這樣就無法滿足用戶截屏后跳出分享提示的需求。既然無法從根本上解決截屏監(jiān)聽的問題,那么就要考慮通過其他方式間接實現(xiàn),目前比較成熟穩(wěn)定的方案是監(jiān)聽系統(tǒng)媒體數(shù)據(jù)庫資源的變化,具體方案原理如下:

Android 系統(tǒng)有一個媒體數(shù)據(jù)庫,每拍一張照片,或使用系統(tǒng)截屏截取一張圖片,都會把這張圖片的詳細信息加入到這個媒體數(shù)據(jù)庫,并發(fā)出內容改變通知,我們可以利用內容觀察者(ContentObserver)監(jiān)聽媒體數(shù)據(jù)庫的變化,當數(shù)據(jù)庫有變化時,獲取***插入的一條圖片數(shù)據(jù),如果該圖片符合特定的規(guī)則,則認為被截屏了。

考慮到手機存儲包括內部存儲器和外部存儲器,為了增強兼容性,***同時監(jiān)聽兩種儲存空間的變化,以下是需要 ContentObserver 監(jiān)聽的資源 URI :

 

  1. MediaStore.Images.Media.INTERNAL_CONTENT_URI  
  2. MediaStore.Images.Media.EXTERNAL_CONTENT_URI 

讀取外部存儲器資源,需要添加權限:

  1. android.permission.READ_EXTERNAL_STORAGE 

注:在 Android 6.0 及以上版本需要動態(tài)申請權限

1. 截屏判斷規(guī)則

當 ContentObserver 監(jiān)聽到媒體數(shù)據(jù)庫的數(shù)據(jù)改變, 在有數(shù)據(jù)改變時獲取***插入數(shù)據(jù)庫的一條圖片數(shù)據(jù), 如果符合以下規(guī)則, 則認為截屏了:

  1. 時間判斷:通常截屏生成后會立馬存入系統(tǒng)多媒體數(shù)據(jù)庫,也就是說監(jiān)聽到數(shù)據(jù)庫變化的時間與截圖生成的時間不會相差太多,這里推薦以10秒作為閾值,當然這個也是經(jīng)驗值。
  2. 尺寸判斷:截屏顧名思義取得是當前手機屏幕尺寸大小的圖片,所以圖片寬高大于屏幕寬高的肯定都不是截圖產(chǎn)生的。
  3. 路徑判斷:由于各手機廠家存放截圖的文件路徑都不太一樣,國內情況可能會更嚴重,但是通常圖片保存路徑都會包含一些常見的關鍵詞,比如 “screenshot”、 “screencapture” 、 “screencap” 、 “截圖”、 “截屏”等,每次都檢查圖片路徑信息是否包含這些關鍵詞。

關于第3點需要補充說明一下,由于要判斷圖片文件路徑是否包含關鍵字,所以目前僅支持中英文環(huán)境,如果需要支持其他語言,需要手動添加一些該語言的關鍵詞,否則有可能獲取不到圖片。

以上3點基本上可以保證截圖的正常監(jiān)聽,當然在實際測試過程中,還會發(fā)現(xiàn)有些機型存在多報的情況,所以還需要做一些去重等工作,關于去重下面還會再提及。

2. 關鍵代碼

原理都了解清楚了,那么接下來就是如何實現(xiàn)的問題了。這里最關鍵是媒體內容觀察者的設置,從數(shù)據(jù)庫中取出***條數(shù)據(jù)并解析圖片信息,然后再檢驗圖片信息是否符合以上3條規(guī)則。

為了說清楚如何監(jiān)聽媒體數(shù)據(jù)庫改變,先要稍微講一下 ContentObserver 的原理。 ContentObserver ——內容觀察者,目的是觀察(捕捉)特定 Uri 引起的數(shù)據(jù)庫的變化,繼而做一些相應的處理,它類似于數(shù)據(jù)庫技術中的觸發(fā)器(Trigger),當 ContentObserver 所觀察的 Uri 發(fā)生變化時,便會觸發(fā)它。當然想要觀察就必須先要注冊, Android 系統(tǒng)提供了 ContentResolver#registerContentObserver 方法用來注冊觀察器。此部分不熟悉的同學可以溫習一下 Android 的 ContentProvider 相關知識。

接下來直接用代碼說明整個注冊和觸發(fā)流程,代碼如下:

 

  1. private void initMediaContentObserver() { 
  2.     // 運行在 UI 線程的 Handler, 用于運行監(jiān)聽器回調  
  3.     private final Handler mUiHandler = new Handler(Looper.getMainLooper()); 
  4.     // 創(chuàng)建內容觀察者,包括內部存儲和外部存儲 
  5.     mInternalObserver = new MediaContentObserver(MediaStore.Images.Media.INTERNAL_CONTENT_URI, mUiHandler); 
  6.     mExternalObserver = new MediaContentObserver(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, mUiHandler); 
  7.     // 注冊內容觀察者 
  8.     mContext.getContentResolver().registerContentObserver( 
  9.             MediaStore.Images.Media.INTERNAL_CONTENT_URI, false, mInternalObserver); 
  10.     mContext.getContentResolver().registerContentObserver( 
  11.             MediaStore.Images.Media.EXTERNAL_CONTENT_URI, false, mExternalObserver); 
  12. /** 
  13.  * 自定義媒體內容觀察者類(觀察媒體數(shù)據(jù)庫的改變) 
  14.  */ 
  15. private class MediaContentObserver extends ContentObserver { 
  16.     private Uri mediaContentUri;       // 需要觀察的Uri 
  17.     public MediaContentObserver(Uri contentUri, Handler handler) { 
  18.         super(handler); 
  19.         mediaContentUri = contentUri; 
  20.     } 
  21.     @Override 
  22.     public void onChange(boolean selfChange) { 
  23.         super.onChange(selfChange); 
  24.         // 處理媒體數(shù)據(jù)庫反饋的數(shù)據(jù)變化 
  25.         handleMediaContentChange(mediaContentUri); 
  26.     } 

有注冊就需要在 Activity 銷毀時取消注冊,所以還需要封裝一個解除注冊的方法供外部調用, Android 系統(tǒng)提供 ContentResolver#unregisterContentObserver 方法來取消注冊,代碼比較簡單,這里就不再展示了。

監(jiān)聽器設置和注冊完成后,一旦用戶操作了截屏動作,系統(tǒng)就會執(zhí)行 ContentObserver#onChange 回調方法,在這個方法中我們可以根據(jù) Uri 獲取并解析數(shù)據(jù)。這里展示一下具體的數(shù)據(jù)解析過程,上述提到的規(guī)則判斷比較簡單,就不再展示了。

 

  1. private void handleMediaContentChange(Uri contentUri) { 
  2.     Cursor cursor = null
  3.         try { 
  4.             // 數(shù)據(jù)改變時查詢數(shù)據(jù)庫中***加入的一條數(shù)據(jù) 
  5.             cursor = mContext.getContentResolver().query(contentUri, 
  6.                     Build.VERSION.SDK_INT < 16 ? MEDIA_PROJECTIONS : MEDIA_PROJECTIONS_API_16, 
  7.                     nullnull, MediaStore.Images.ImageColumns.DATE_ADDED + " desc limit 1"); 
  8.             if (cursor == null)  return
  9.             if (!cursor.moveToFirst()) return;        
  10.             // cursor.getColumnIndex獲取數(shù)據(jù)庫列索引 
  11.             int dataIndex = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
  12.             String data = cursor.getString(dataIndex);        // 圖片存儲地址 
  13.  
  14.             int dateTakenIndex = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATE_TAKEN); 
  15.             long dateTaken = cursor.getLong(dateTakenIndex);  // 圖片生成時間 
  16.  
  17.             int width = 0; 
  18.             int height = 0; 
  19.             if (Build.VERSION.SDK_INT >= 16) { 
  20.                 int widthIndex = cursor.getColumnIndex(MediaStore.Images.ImageColumns.WIDTH); 
  21.                 int heightIndex = cursor.getColumnIndex(MediaStore.Images.ImageColumns.HEIGHT); 
  22.                 width = cursor.getInt(widthIndex);    // 獲取圖片高度 
  23.                 height = cursor.getInt(heightIndex);  // 獲取圖片寬度 
  24.             } else { 
  25.                 Point size = getImageSize(data);     // 根據(jù)路徑獲取圖片寬和高 
  26.                 width = size.x; 
  27.                 height = size.y; 
  28.             } 
  29.             // 處理獲取到的***行數(shù)據(jù),分別判斷路徑是否包含關鍵詞、時間差以及圖片寬高和屏幕寬高的大小關系 
  30.             handleMediaRowData(data, dateTaken, width, height); 
  31.         } catch (Exception e) { 
  32.             e.printStackTrace(); 
  33.         } finally { 
  34.             if (cursor != null && !cursor.isClosed()) { 
  35.                 cursor.close(); 
  36.             } 
  37.         } 

有些手機 ROM 截屏一次會發(fā)出多次內容改變的通知,因此需要做去重操作,去重也不復雜,可以用列表緩存最近十幾條圖片地址數(shù)據(jù),每次獲取到新的圖片地址,都會先判斷緩存中是否存在相同的圖片地址,如果當前的圖片地址已經(jīng)存在列表中,則直接過濾掉即可,否則添加到緩存中。如此就可以保證截屏監(jiān)聽事件既不遺漏也不重復。

以上就是手機截屏的核心原理和關鍵代碼,如果需要分享截屏圖片也很簡單, data 即為圖片的存儲地址,轉換成 Bitmap 即可完成分享。

二、WebView 生成長圖

介紹 web 長圖之前,先來說一下單屏圖片的生成方案,和手機截圖不同的是生成的圖片不會顯示頂部的狀態(tài)欄、標題欄以及底部的菜單欄,可以滿足不同的業(yè)務需求。

 

  1. // WebView 生成當前屏幕大小的圖片,shortImage 就是最終生成的圖片 
  2. Bitmap shortImage = Bitmap.createBitmap(screenWidth, screenHeight, Bitmap.Config.RGB_565); 
  3. Canvas canvas = new Canvas(shortImage);   // 畫布的寬高和屏幕的寬高保持一致 
  4. Paint paint = new Paint(); 
  5. canvas.drawBitmap(shortImage, screenWidth, screenHeight, paint); 
  6. mWebView.draw(canvas); 

有的時候我們需要將一個長 Web 網(wǎng)頁生成圖片分享出去,相似的例子就是手機端的各種便簽應用,當便簽內容超出一屏時,就需要將所有的內容生成一張長圖對外分享出去。

WebView 和其他 View 一樣,系統(tǒng)都提供了 draw 方法,可以直接將 View 的內容渲染到畫布上,有了畫布我們就可以在上面繪制其他各種各種的內容,比如底部添加 Logo 圖片,畫紅線框等等。關于 WebView 生成長圖網(wǎng)上已經(jīng)有很多現(xiàn)成的方案和代碼,以下代碼是經(jīng)測試過的穩(wěn)定版本,供參考。

 

  1. // WebView 生成長圖,也就是超過一屏的圖片,代碼中的 longImage 就是***生成的長圖 
  2. mWebView.measure(MeasureSpec.makeMeasureSpec(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED), 
  3.                  MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
  4. mWebView.layout(0, 0, mWebView.getMeasuredWidth(), mWebView.getMeasuredHeight()); 
  5. mWebView.setDrawingCacheEnabled(true); 
  6. mWebView.buildDrawingCache(); 
  7. Bitmap longImage = Bitmap.createBitmap(mWebView.getMeasuredWidth(), 
  8.         mWebView.getMeasuredHeight(), Bitmap.Config.ARGB_8888); 
  9. Canvas canvas = new Canvas(longImage);  // 畫布的寬高和 WebView 的網(wǎng)頁保持一致 
  10. Paint paint = new Paint(); 
  11. canvas.drawBitmap(longImage, 0, mWebView.getMeasuredHeight(), paint); 
  12. mWebView.draw(canvas); 

Android 為了提高滾動等各方面的繪制速度,可以為每一個 View 建立一個緩存,使用 View#buildDrawingCache 為自己的 View 建立相應的緩存, 這個 cache 就是一個 bitmap 對象。利用這個功能可以對整個屏幕視圖進行截屏并生成 Bitmap ,也可以獲得指定的 View 的 Bitmap 對象。這里由于還要在原有的圖片上繪制 Logo ,所以直接使用了 WebView 的 draw 方法了。

由于我們的 H5 頁面大部分都是運行在微信的 X5 瀏覽器中,所以為了減少前端的適配工作,我們將騰訊的 X5 瀏覽器內核引入了 Android 工程中,代替系統(tǒng)原生的 WebView 內核,關于 X5 內核的引入后續(xù)還會有專門的文章介紹,敬請期待。

這里需要說明一下如何在 X5 內核下生成 Web 長圖,上面代碼展示的系統(tǒng)原生 WebView 生成圖片的方案,但是在 X5 環(huán)境下上述代碼就失效了,經(jīng)過踩坑以及查看 X5 內核源代碼,最終我們找到了解決該問題的方法,下面用關鍵代碼來說明一下具體的實現(xiàn)方式。

 

  1. // 這里的 mWebView 就是 X5 內核的 WebView ,代碼中的 longImage 就是***生成的長圖 
  2. mWebView.measure(MeasureSpec.makeMeasureSpec(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED), 
  3.                  MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
  4. mWebView.layout(0, 0, mWebView.getMeasuredWidth(), mWebView.getMeasuredHeight()); 
  5. mWebView.setDrawingCacheEnabled(true); 
  6. mWebView.buildDrawingCache(); 
  7. Bitmap longImage = Bitmap.createBitmap(mWebView.getMeasuredWidth(), 
  8.         mWebView.getMeasuredHeight() + endHeight, Bitmap.Config.ARGB_8888); 
  9. Canvas canvas = new Canvas(longImage);  // 畫布的寬高和 WebView 的網(wǎng)頁保持一致 
  10. Paint paint = new Paint(); 
  11. canvas.drawBitmap(longImage, 0, mWebView.getMeasuredHeight(), paint); 
  12. float scale = getResources().getDisplayMetrics().density; 
  13. x5Bitmap = Bitmap.createBitmap(mWebView.getWidth(), mWebView.getHeight(), Bitmap.Config.ARGB_8888); 
  14. Canvas x5Canvas = new Canvas(x5Bitmap); 
  15. x5Canvas.drawColor(ContextCompat.getColor(this, R.color.fragment_default_background)); 
  16. mWebView.getX5WebViewExtension().snapshotWholePage(x5Canvas, falsefalse);  // 少了這行代碼就無法正常生成長圖 
  17. Matrix matrix = new Matrix(); 
  18. matrix.setScale(scale, scale); 
  19. longCanvas.drawBitmap(x5Bitmap, matrix, paint); 

注:X5 內核生成的長圖清晰度比原生 WebView 要差一些,目前還沒有太好的解決方案。

三、長圖分享

一般我們向各個社交平臺上發(fā)送的圖片都比較小,***也就是手機屏幕大小的圖片,再大的就不多見了。但是也有例外,比如微博的長圖、錘子便簽的長圖等等,如果直接將這些圖片通過微信分享 SDK 或者微博分享 SDK 分享出去,就會發(fā)現(xiàn)圖片基本上都是模糊的,但是將圖片發(fā)送給 iPhone 手機就可以正常查看,我們只能哀嘆 Android 版微信不給力。

微信 SDK 不給力,但是產(chǎn)品體驗還是不能丟,怎么辦呢?辦法還是有的,我們都知道除了各個社交平臺自己的分享 SDK ,系統(tǒng)提供了原生分享方案,本質上就是社交平臺把目標 Activity 對外暴露了出來,然后第三方 App 就可以根據(jù)事先定義好的 Intent 跳轉規(guī)則喚起社交平臺,同時完成數(shù)據(jù)傳輸和展示。

好像問題可以***解決了,但是還是有坑需要接著踩。在 Android 7.0 及以上的版本系統(tǒng)限制了 Intent 傳輸 file:// 開頭的數(shù)據(jù),這也就限制了系統(tǒng)原生分享單圖,怎么辦呢?兩種方案,一種是在 7.0 及以上版本上使用微信等分享 SDK ,接受分享圖片模糊的現(xiàn)狀,另一種是通過反射跳過系統(tǒng)對以 file:// 開頭文件在 Intent 中傳輸?shù)南拗疲沁@種方式會有風險,畢竟我們不知道未來 Android 會做出什么調整。以下是跳過系統(tǒng)限制的代碼片段,供參考。

 

  1. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
  2.     try { 
  3.         Method ddfu = StrictMode.class.getDeclaredMethod("disableDeathOnFileUriExposure"); 
  4.         ddfu.invoke(null); 
  5.     } catch (Exception e) { 
  6.     } 

至此基本上可以滿足任意圖片大小的分享了。此外經(jīng)過驗證還發(fā)現(xiàn)微信分享 Android 版 SDK 對縮略圖和分享圖的大小都有限制,官方給的指導意見是縮略圖小于 32K ,分享圖片小于 10M 即可正常分享,但是試驗下來這兩個值都是理論上限,不要太接近這個上限,如果圖片太大,縮略圖和分享圖都會出現(xiàn)模糊的情況,甚至無法正常分享,當然對于通過系統(tǒng)分享的話就不存在這個限制,圖片也比較清晰。

除了圖片大小有限制,縮略圖的尺寸也是有限制的,這一點官方文檔并沒有給出,試驗結果顯示圖片尺寸小于等于120×120是比較安全的范圍,分享都沒有問題。

四、小結

截屏監(jiān)聽、 WebView 生成長圖以及長圖分享都是我們團隊之前未曾遇到過的業(yè)務需求,在滿足產(chǎn)品業(yè)務需求的同時,也踩了很多坑,積累了一些經(jīng)驗,特此總結。

責任編輯:未麗燕 來源: 碼農(nóng)網(wǎng)
相關推薦

2017-06-02 14:00:34

Android截屏WebView

2011-07-08 13:15:52

JSP

2010-01-27 18:12:14

Android dia

2010-01-26 13:28:11

Android開發(fā)要點

2009-10-15 09:27:00

2009-09-29 16:32:11

OJB Hiberna

2009-08-19 09:24:43

AJAX引擎經(jīng)驗總結

2009-09-16 17:13:54

學習Linq

2010-01-25 14:25:33

Android Int

2010-01-25 13:37:07

Android傳感器

2010-05-19 16:57:49

SVN與CVS的區(qū)別

2009-09-25 17:26:55

使用Hibernate

2009-09-27 14:53:38

Hibernate S

2013-12-18 15:54:21

2009-08-13 18:13:27

C#學習經(jīng)驗

2010-07-16 09:14:49

Perl模式

2009-12-24 16:46:03

WPF性能優(yōu)化

2010-03-08 15:12:27

Python語言

2010-06-13 13:44:07

UML學習筆記

2011-07-21 13:40:17

java
點贊
收藏

51CTO技術棧公眾號

亚洲福利视频网| 中文字幕精品一区二区三区精品 | 91精品视频在线看| 特级片在线观看| 精品女人视频| 精品视频在线免费| 美女黄色免费看| 蜜桃视频在线入口www| 日本色综合中文字幕| 久久夜色精品国产欧美乱| 中文字幕无码人妻少妇免费| 国产经典一区| 亚洲亚洲精品在线观看| 国产69精品一区二区亚洲孕妇| 色先锋资源久久综合5566| jjzz黄色片| 91大神在线观看线路一区| 亚洲国产乱码最新视频 | 香蕉视频在线观看黄| 欧美性猛交xxx高清大费中文| 亚洲美女精品一区| 日本精品一区二区三区高清 久久| 91影院在线播放| 国产欧美91| 久久97精品久久久久久久不卡| av男人的天堂av| 韩国女主播一区二区三区| 欧美顶级少妇做爰| www.国产区| 91www在线| 亚洲人成精品久久久久久| 午夜精品视频在线观看一区二区 | 国产高清无密码一区二区三区| 国产suv精品一区二区三区88区 | 欧美在线观看一二区| 国产精品无码人妻一区二区在线| 黄色成人在线| 欧美激情在线观看视频免费| 久久久精品动漫| 成人毛片在线精品国产| 狠狠久久亚洲欧美| 国产精品久久av| 手机在线看片1024| 国产精品久久久久久久免费软件| 欧美国产精品va在线观看| 天天操天天摸天天舔| 精品久久91| 亚洲新中文字幕| 粉嫩av蜜桃av蜜臀av| 欧美激情99| 亚洲精品按摩视频| 精品无码在线视频| 日韩母乳在线| 国产视频自拍一区| 亚洲熟妇无码av| 视频一区中文| 亚洲天堂av高清| 国产视频三区四区| 久久人人99| 亚洲系列中文字幕| 长河落日免费高清观看| 日韩片欧美片| 久久精品国产精品亚洲| 国产精品精品软件男同| 91精品国产自产在线观看永久∴| 久久资源免费视频| 九九热只有精品| 伊人激情综合| 欧美亚洲激情在线| 亚洲大尺度在线观看| 美女网站在线免费欧美精品| 成人黄色av网站| 一本一道精品欧美中文字幕| 国内成人自拍视频| 91免费在线观看网站| 欧美视频xxx| 久久久久9999亚洲精品| 一级做a爰片久久| 在线观看男女av免费网址| 亚洲午夜免费福利视频| 国产精品50p| 外国电影一区二区| 欧美性猛片aaaaaaa做受| 成人性生交视频免费观看| aaa国产精品视频| 亚洲精品一区二区网址| 手机免费观看av| 欧美精选在线| 日韩免费黄色av| 国产日本精品视频| 91在线丨porny丨国产| 五月天综合网| 2021中文字幕在线| 欧美日韩久久久| 国产在线观看免费播放| 奇米色欧美一区二区三区| 久久这里只有精品99| 99精品在线播放| 精品亚洲国内自在自线福利| 国产一区二区三区四区五区加勒比 | 石原莉奈在线亚洲二区| 亚洲影院在线看| 精品无人乱码| 亚洲成人免费观看| 中文字幕免费高清在线| 综合伊思人在钱三区| 色综合天天狠天天透天天伊人| 销魂美女一区二区| 粉嫩aⅴ一区二区三区四区| 日韩av电影免费观看| 日本一级理论片在线大全| 91高清视频在线| 国产高潮失禁喷水爽到抽搐 | 福利电影一区二区| 视频一区二区三区免费观看| 国产嫩草在线视频| 欧美日本不卡视频| 爱爱的免费视频| 一区二区亚洲| 91pron在线| 一区二区三区视频在线观看视频| 一本一道波多野结衣一区二区| 苍井空张开腿实干12次| 91综合久久一区二区| 日韩美女毛茸茸| 无码精品视频一区二区三区| 亚洲免费观看高清| 亚洲欧美日韩三级| 国产一区二区观看| 538国产精品一区二区免费视频| 国产不卡av在线播放| 国产精品每日更新在线播放网址| 男人亚洲天堂网| 国内精品免费| 性欧美xxxx交| 亚洲精品.www| 一区二区三区在线视频观看58| 毛片毛片毛片毛| 色喇叭免费久久综合网| 国产精品美女在线观看| 国产青青草在线| 日本高清免费不卡视频| 最近中文字幕免费视频| 六月婷婷一区| 美女一区视频| 香蕉视频亚洲一级| 亚洲色图18p| 波多野结衣视频在线观看| 26uuu亚洲| 春日野结衣av| 性欧美lx╳lx╳| 欧美中文字幕在线播放| 日本视频在线观看一区二区三区| 岛国视频午夜一区免费在线观看| 亚洲精品乱码久久久久久不卡| 亚洲看片一区| 久久99精品久久久久久久久久 | 成人日韩在线电影| 黄色成人影院| 精品国产凹凸成av人网站| 国产无遮挡又黄又爽在线观看| 福利一区二区在线| 国产黄页在线观看| 激情五月综合网| 国产精品久久久久久久久久新婚 | 久久爱www成人| 国产成人精品电影久久久| avtt在线播放| 欧美一区二区三区白人| 国产一级一片免费播放放a| 99久久国产综合精品女不卡| 18禁男女爽爽爽午夜网站免费| 国产中文字幕一区二区三区| 成人国产精品av| 欧美aaa免费| 日韩理论片久久| 中文字幕欧美色图| 亚洲精品国产一区二区精华液 | 向日葵污视频在线观看| 91精品国偷自产在线电影| 国产一区二区三区四区五区在线| 日本美女一区| 久久夜色撩人精品| 婷婷丁香花五月天| 欧美视频一区二区三区四区| 男人与禽猛交狂配| www国产亚洲精品久久麻豆| 超碰在线人人爱| 狠狠爱综合网| 日本不卡二区| 日韩激情精品| 日本欧美一级片| 亚洲区欧洲区| 国产一区二区三区在线| 亚洲av无码国产精品久久不卡| 狠狠躁天天躁日日躁欧美| 久久午夜福利电影| 粉嫩嫩av羞羞动漫久久久| www.超碰com| 亚洲一级二级| 一区二区三区不卡在线| 欧美电影完整版在线观看| 国产啪精品视频网站| 亚洲天堂免费电影| 久久伊人色综合| 精品无人乱码| 亚洲国产精品va| 91超薄丝袜肉丝一区二区| 欧美日韩国产一区中文午夜| 天海翼在线视频| 久久久久久久久久久久久夜| 国产精品无码自拍| 麻豆国产精品一区二区三区| 成人综合视频在线| 亚洲成人原创| 中文字幕乱码免费| 成人国产精品一级毛片视频| 久久久99爱| 9l视频自拍九色9l视频成人| 91社区国产高清| 日本综合视频| 青青久久av北条麻妃海外网| 青草在线视频| 不卡伊人av在线播放| 97人人在线| 亚洲午夜国产成人av电影男同| 欧美 日韩 综合| 精品久久人人做人人爰| 国产精品高潮呻吟久久久| 欧洲在线/亚洲| 欧美一区二区三区网站| 天天亚洲美女在线视频| 久久精品国产亚洲av高清色欲| 亚洲欧美偷拍另类a∨色屁股| 蜜桃视频最新网址| 欧美国产1区2区| 中文字幕第20页| 久久久久久久久一| 永久免费成人代码| 久久久久九九视频| 性欧美丰满熟妇xxxx性仙踪林| jizz一区二区| 日韩综合第一页| av在线不卡网| 青青草视频网站| 成人av电影在线| 国产精品九九视频| 99久久精品国产麻豆演员表| bl动漫在线观看| 99在线热播精品免费| 艳妇乳肉豪妇荡乳xxx| 波多野结衣中文字幕一区二区三区| 又黄又色的网站| 99久久er热在这里只有精品15| 噜噜噜在线视频| 久久青草欧美一区二区三区| 国产黄片一区二区三区| 国产人成一区二区三区影院| 纪美影视在线观看电视版使用方法| 国产精品麻豆一区二区| 99成人在线观看| 亚洲人成精品久久久久| 久久精品视频6| 粉嫩av一区二区三区免费野| 无码人妻久久一区二区三区不卡| 在线观看三级视频欧美| 国产尤物在线观看| 欧美岛国在线观看| 手机看片一区二区三区| 亚洲欧美中文日韩在线| 香蕉视频免费在线播放| 欧美麻豆久久久久久中文| gogo高清在线播放免费| 日本亚洲欧美三级| 9999在线精品视频| 国产精品美女久久久久av福利| 美国成人xxx| 午夜视频久久久| 午夜国产欧美理论在线播放 | 欧美男男tv网站在线播放| 国产国语videosex另类| 国产一区二区av在线| 国产日韩一区欧美| 国产中文精品久高清在线不| 亚洲国产一二三精品无码| 午夜一级久久| 久久久久久综合网| 99视频有精品| 小向美奈子av| 天天做天天摸天天爽国产一区| 美女黄页在线观看| 精品日韩一区二区三区免费视频| 久草福利在线视频| 久久99青青精品免费观看| 高清不卡亚洲| 99在线热播| 青青草91久久久久久久久| 又大又硬又爽免费视频| 青青草97国产精品免费观看无弹窗版| 91精品国产高清91久久久久久 | 亚洲国产成人久久综合一区| 91在线看片| 18一19gay欧美视频网站| 国产精久久一区二区| 日韩福利视频| 在线播放不卡| 奇米777在线视频| 国产视频一区二区在线观看| 久久丫精品久久丫| 欧美精品久久99| 黑人与亚洲人色ⅹvideos| 色综合男人天堂| 精品国产黄a∨片高清在线| 蜜桃精品久久久久久久免费影院| 欧美久久一级| 97超碰成人在线| 久久精品欧美一区二区三区麻豆| 久久久久久福利| 91麻豆精品国产91久久久久久久久| 男女网站在线观看| 午夜精品久久久久久久99黑人| 国产一区二区| 一区一区视频| 日本美女一区二区三区| 国产精品无码久久久久一区二区| 亚洲午夜电影网| 国产视频在线一区| 久久激情视频久久| 国产亚洲人成a在线v网站| 日韩高清在线播放| 久久福利毛片| 亚洲精品乱码久久久久久久| 亚洲高清一区二区三区| 国产成人精品毛片| 久久这里只有精品99| 亚洲电影二区| 日本黄色播放器| 久久国产福利国产秒拍| gv天堂gv无码男同在线观看| 欧美综合天天夜夜久久| 国产中文字幕在线| 国产精品jizz在线观看麻豆| 国产欧美一区二区精品久久久| 国产成人a亚洲精v品无码| 91色婷婷久久久久合中文| 国产一级做a爱片久久毛片a| 日韩精品中文字幕有码专区| 日本午夜大片a在线观看| 欧美激情第六页| 噜噜噜躁狠狠躁狠狠精品视频| 极品粉嫩小仙女高潮喷水久久| 岛国av在线不卡| 成年午夜在线| 国产欧美日韩视频| 综合久久综合| 成人啪啪18免费游戏链接| 午夜视频久久久久久| 色屁屁草草影院ccyycom| **欧美日韩vr在线| 国产精品一区二区99| 日本xxxx黄色| 亚洲日本中文字幕区| 亚洲精品无遮挡| 97在线观看视频国产| 久久综合色占| 怡红院亚洲色图| 伊人色综合久久天天| 全国男人的天堂网| 欧美一级视频一区二区| 成人嘿咻视频免费看| 中文字幕第三区| 亚洲成人av中文| 国产区在线视频| 亚洲最大的网站| 亚洲欧美成人| 婷婷综合在线视频| 精品乱人伦一区二区三区| 欧美gay囗交囗交| 日本黄色播放器| 白白色亚洲国产精品| 最近中文在线观看| 欧美日韩国产123| 亚洲综合小说图片| 91 在线视频观看| 亚洲一级二级在线| 成人在线视频成人| 亚洲专区中文字幕| 久久精品一区| 欧美精品一区二区蜜桃| 国产午夜精品久久久| 国产高清精品二区| 97在线免费公开视频| 亚洲色图欧美偷拍| 美女欧美视频在线观看免费 | 亚洲欧美日韩一区二区三区在线观看| 蜜桃视频污在线观看| 国产欧美最新羞羞视频在线观看| 亚洲第一黄网| 日韩精品一区二区亚洲av性色| 日韩激情视频在线播放|