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

日韩中文字幕精品| 亚洲综合一二区| 国产精品免费小视频| 99热6这里只有精品| 色妞ww精品视频7777| 黄网站色欧美视频| 亚洲va久久久噜噜噜久久狠狠| 国产精品久久久国产盗摄| 在线 亚洲欧美在线综合一区| 国产在线播精品第三| 97精品电影院| 国产日韩欧美在线| 欧美一级视频免费观看| 欧美电影三区| 精品调教chinesegay| 中文字幕1234区| 久久sese| 亚洲一区二区影院| 中文精品视频一区二区在线观看| 手机在线观看毛片| 国产资源在线一区| 国产精品久久久久久久久久99| 免看一级a毛片一片成人不卡| 国产一区二区三区探花| 亚洲大胆人体在线| 老女人性生活视频| 日本电影久久久| 色视频成人在线观看免| 色综合视频一区中文字幕| 久久久久国产精品区片区无码| 北岛玲精品视频在线观看| 色天使色偷偷av一区二区| 人妻夜夜添夜夜无码av| 亚洲丝袜一区| 国产精品福利一区| 亚洲国产日韩欧美| 狠狠色伊人亚洲综合网站l| 亚洲久久在线观看| 亚洲a一区二区三区| 亚洲性xxxx| 天堂久久久久久| 国产精品对白久久久久粗| 日韩午夜在线播放| 欧美xxxxxbbbbb| 欧洲亚洲精品| 欧美日韩国产欧美日美国产精品| 日韩一级在线免费观看| videos性欧美另类高清| 黑人巨大精品欧美一区二区三区| 成人在线播放网址| 888av在线视频| 亚洲香肠在线观看| 国产毛片久久久久久国产毛片| 性xxxfreexxxx性欧美| 亚洲日本青草视频在线怡红院| 中文字幕免费在线不卡| 日本精品在线| 亚洲免费高清视频在线| 男人c女人视频| 国产精品—色呦呦| 香港成人在线视频| 男人揉女人奶房视频60分| 免费电影日韩网站| 欧美亚洲综合一区| 九九热免费在线观看| 日韩免费在线电影| 91精品国产色综合久久| 国产chinesehd精品露脸| 第一区第二区在线| 亚洲精品国产精品久久清纯直播| 37p粉嫩大胆色噜噜噜| 亚洲天堂日韩在线| 综合136福利视频在线| 天天做夜夜爱爱爱| 在线日本成人| 日韩av观看网址| 一级α片免费看刺激高潮视频| 国产乱码精品1区2区3区| 99久久久精品免费观看国产| 特黄视频在线观看| 国产亚洲综合av| 一本一道久久久a久久久精品91| 国产不卡在线| 午夜精品在线看| 搡女人真爽免费午夜网站| 成人网av.com/| 欧美精品一区二| 手机av在线不卡| 韩日欧美一区| 国产精品久久久久高潮| 国产色片在线观看| 91免费精品国自产拍在线不卡| 色999五月色| 欧美videos另类精品| 欧美日韩在线第一页| 在线黄色免费看| 欧美1区2区3区4区| zzjj国产精品一区二区| 免费毛片一区二区三区| 秋霞精品一区二区三区| jvid福利在线一区二区| 久精品免费视频| 亚洲 欧美 中文字幕| 国产精品一区二区久久不卡| 久久99精品国产一区二区三区| 2019中文字幕在线视频| 午夜视频一区二区三区| 最新免费av网址| 亚洲丝袜美腿一区| 欧美精品videosex性欧美| 又骚又黄的视频| 99久久国产免费看| 性做爰过程免费播放| 亚洲成人看片| 日韩三级免费观看| 婷婷综合在线视频| 久久精品道一区二区三区| **亚洲第一综合导航网站| 国产成人天天5g影院在线观看| 亚洲国产另类av| 亚洲综合伊人久久| 日韩av有码| 国产精品444| 天天干视频在线| 一区av在线播放| 亚洲精品乱码久久久久久动漫| 国产欧美日韩影院| 2019中文字幕在线观看| 亚洲精品97久久中文字幕无码| 中文字幕制服丝袜成人av| 国产真实乱子伦| 久久久久影视| 欧美—级高清免费播放| 国产精品欧美激情在线| 国产精品你懂的在线| 一本色道无码道dvd在线观看| 久久中文资源| 97久久精品人搡人人玩| 少妇喷水在线观看| 亚洲观看高清完整版在线观看 | 99在线视频首页| 黄色在线观看网站| 欧美精品黑人性xxxx| 国产一级淫片久久久片a级| 久久久久看片| 神马影院一区二区| 97精品国产综合久久久动漫日韩| 亚洲欧洲av一区二区| 99re国产在线| 久久久久久久久99精品| 北条麻妃视频在线| re久久精品视频| 国产情人节一区| 国产理论在线观看| 日韩欧美国产高清| 懂色av.com| 久久久久久日产精品| 黄色片久久久久| 成人一级毛片| 91久久精品美女高潮| 性欧美videoshd高清| 亚洲成av人影院在线观看| 日韩欧美a级片| 久久久噜噜噜久久中文字幕色伊伊| 91淫黄看大片| 97在线精品| www.久久爱.cn| 看黄在线观看| 中文字幕在线亚洲| 亚洲国产精品久久久久久6q| 香蕉加勒比综合久久| 色婷婷在线影院| 久久99国产精品尤物| 51xx午夜影福利| 欧美性生活一级片| 国产精品视频播放| 最新97超碰在线| 精品免费视频一区二区| 久久久久久不卡| 亚洲色图欧美偷拍| 亚洲中文字幕无码av| 七七婷婷婷婷精品国产| 男人添女荫道口女人有什么感觉| 亚洲综合小说图片| 91精品视频播放| 九色porny自拍视频在线播放| 在线日韩日本国产亚洲| jizz中国少妇| 日本高清成人免费播放| 极品久久久久久| 久久综合九色综合97_久久久| 亚洲一区二区三区观看| 亚洲免费大片| 国产又粗又爽又黄的视频 | 亚洲午夜精品久久久中文影院av| 国产精品美女久久久久| 欧美在线欧美在线| 国产在线更新| 亚洲热线99精品视频| www.狠狠干| 欧美性猛交xxxxxxxx| 国产一级视频在线播放| 国产精品久久久久久久久久久免费看| 少妇熟女视频一区二区三区 | 91黄在线观看| 欧美激情喷水| 午夜精品理论片| 97超碰在线公开在线看免费| 国产亚洲美女精品久久久| 人妻精品一区一区三区蜜桃91| 欧美日韩午夜在线| 一区二区三区 在线观看视| 91亚洲国产成人精品一区| 欧美日韩国产专区| 欧美成人精品欧美一级| 中文字幕中文字幕中文字幕亚洲无线| 国产国语性生话播放| 国产成人免费高清| 女人高潮一级片| 日本视频在线一区| 男人揉女人奶房视频60分| 韩国在线一区| www婷婷av久久久影片| 91久久高清国语自产拍| 亚洲精品二区| 红桃成人av在线播放| 欧美日韩亚洲免费| 天堂成人娱乐在线视频免费播放网站| 2020国产精品久久精品不卡| 亚洲人体在线| 国产精品自在线| 成人涩涩视频| 国产mv久久久| 亚洲第一影院| 青青久久av北条麻妃黑人| 久草在线资源福利站| 国内精品久久久久伊人av| 精品一性一色一乱农村| 欧美成人在线网站| gogogogo高清视频在线| 欧美成人合集magnet| 在线xxxx| 欧美精品videofree1080p| www中文字幕在线观看| 久久久久久国产精品| 亚洲小说区图片区都市| 欧美俄罗斯性视频| 蜜桃传媒在线观看免费进入| 欧美精品videosex性欧美| 亚洲精品视频网址| 国产精品入口66mio| 成人av一级片| 石原莉奈在线亚洲二区| 欧美少妇性生活视频| 日韩主播视频在线| 四季av一区二区三区| 国内精品伊人久久久久影院对白| 手机看片国产精品| 成人激情小说网站| 黄色在线观看av| 日本一区二区三区免费乱视频 | 亚洲欧美激情在线| 18岁成人毛片| 午夜私人影院久久久久| 天天干天天干天天操| 欧美吻胸吃奶大尺度电影| 一级黄色片视频| 欧美成人伊人久久综合网| 欧美熟妇交换久久久久久分类| 日韩精品在线影院| 网友自拍视频在线| 欧美日韩国产二区| 欧美极品videos大乳护士| 国产精品第一区| 国产成年精品| 久久99精品久久久久久水蜜桃| 不卡在线一区二区| 国产亚洲精品久久久久久久| 一区二区三区国产在线| 五月婷婷六月丁香激情| 高清在线成人网| 日韩丰满少妇无码内射| 亚洲品质自拍视频| www毛片com| 日韩小视频在线观看专区| 天堂а√在线8种子蜜桃视频| 中文字幕亚洲国产| 亚洲妇熟xxxx妇色黄| 日韩av不卡在线| 一区视频网站| 日韩欧美视频一区二区三区四区 | 国产裸体舞一区二区三区| 黑人巨大精品欧美一区| 黄色短视频在线观看| 亚洲天堂免费看| 国产精品视频一区在线观看| 欧美一级日韩不卡播放免费| 免费成人av电影| 久久精品视频在线观看| 偷拍精品精品一区二区三区| 147欧美人体大胆444| 欧美日韩国产一区二区三区不卡| 欧美精品卡一卡二| 国产美女在线观看一区| 亚洲精品视频久久久| 亚洲亚洲人成综合网络| 又骚又黄的视频| 亚洲天堂久久av| 17videosex性欧美| 91视频99| 91精品国产91久久久久久密臀| 中文字幕乱码人妻综合二区三区| 国产精品中文有码| 青青青视频在线播放| 色综合天天综合网天天狠天天| 国产综合无码一区二区色蜜蜜| yellow中文字幕久久| 欧美男男激情videos| 99影视tv| 欧美一区二区三区免费看| 黄色在线视频网| 久久亚洲影视婷婷| 日韩欧美不卡视频| 亚洲精品一区二区三区福利| 国产精品扒开做爽爽爽的视频 | 91av久久久| 在线观看成人黄色| 午夜精品成人av| 精品一区国产| 国产亚洲在线| 黑丝av在线播放| 午夜激情综合网| 色丁香婷婷综合久久| 久久久久久久久国产| www.神马久久| 欧美久久久久久久久久久久久| 国产suv精品一区二区883| 久久精品99国产精| 精品裸体舞一区二区三区| 激情图片在线观看高清国产| 91原创国产| 亚洲调教视频在线观看| 成人啪啪18免费游戏链接| 亚洲国产一区二区三区 | 在线看片第一页欧美| 亚洲第一会所| 亚洲国产精品123| 久久av中文字幕片| 久久人妻无码aⅴ毛片a片app| 欧美福利一区二区| 少女频道在线观看免费播放电视剧| 亚洲一区亚洲二区| 激情亚洲成人| 色综合久久五月| 色哟哟国产精品| avtt亚洲| 亚洲一区国产精品| 亚洲国内欧美| 88久久精品无码一区二区毛片| 在线精品视频一区二区三四| av在线第一页| 91亚洲精品在线| 精品二区视频| av无码av天天av天天爽| 欧美在线小视频| 久草中文在线| 好看的日韩精品| 日韩福利视频网| 91精品在线观看视频| 欧美大片黄色| 精品视频导航| 欧美aaaaaa午夜精品| 日韩一卡二卡在线观看| 欧美一二三四区在线| 国产在线88av| 亚洲一区二区三区加勒比| 国产剧情一区二区| 看片网址国产福利av中文字幕| 亚洲人成网站色ww在线| 成人免费观看49www在线观看| www插插插无码视频网站| 国产视频亚洲色图| 精品国产伦一区二区三| 欧美在线视频免费播放| 久久综合电影| 野战少妇38p| 欧美亚男人的天堂| 欧美巨大xxxx做受沙滩| 青青草成人激情在线| 国产精品亚洲专一区二区三区| 草久久免费视频| 久久久精品日本| 蜜桃一区二区| 性一交一黄一片| 欧美性受xxxx| 不卡视频观看| 精品一区二区三区毛片| 国产农村妇女毛片精品久久麻豆| а√天堂资源在线| 国产精品专区一|