亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

詳解Android中Intent對象與Intent Filter過濾匹配過程

2020-04-11 11:10:12
字體:
來源:轉載
供稿:網友

如果對Intent不是特別了解,可以參見博文《詳解Android中Intent的使用方法》,該文對本文要使用的action、category以及data都進行了詳細介紹。如果想了解在開發中常見Intent的使用,可以參見《Android中Intent習慣用法》。

本文內容有點長,希望大家可以耐心讀完。

本文在描述組件在manifest中注冊的Intent Filter過濾器時,統一用intent-filter表示。

一、概述

我們知道,Intent是分兩種的:顯式Intent和隱式Intent。如果一個Intent明確指定了要啟動的組件的完整類名,那么這個Intent就是顯式Intent,否則就是隱式Intent。當我們用一個顯式Intent去啟動組件時,Android會根據Intent對象所提供的component name直接找到要啟動的組件,當我們用一個隱式的Intent去啟動組件時,Android系統就無法直接知道要啟動的組件名稱了,本文就是講解Android系統如何根據隱式Intent查找匹配到要啟動的組件。

當Android系統接收到一個隱式Intent要啟動一個Activity(或其他組件)時,Android會根據以下三個信息比較Intent的信息與注冊的組件的intent-filter的信息,從而為該Intent選擇出最匹配的Activity(或其他組件):

  • intent中的action
  • intent中的category
  • intent中的data(包含Uri以及data的MIME類型)

也就是隱式intent對象要滿足要啟動的目標組件中注冊的intent-filter中的<action />、<category />、<data />三個標簽中的信息,即要分別通過action測試、category測試以及data測試。intent-filter信息是在Android的manife文件中描述的,顧名思義,intent-filter是intent過濾器,就是用來過濾intent的。

如果隱式intent對象同時通過了某個組件的中intent-filter的action測試、category測試以及data測試,那么該組件就可以被intent對象所啟動。如果隱式intent對象沒有通過系統中任何組件的intent-filter測試,那么就沒有Android系統無法找到該intent對象要啟動的組件。下面我們依次看一下如何才能通過這三個測試。

二、Action測試

為了指定能夠接收并處理的Intent的類型,組件可以在intent-filter中聲明其支持0個或多個action,例如:

<intent-filter> <action android:name="com.ispring.action.ACTION_TEST1" /> <action android:name="com.ispring.action.ACTION_TEST2" /> <category android:name="android.intent.category.DEFAULT" /></intent-filter>

intent對象可以通過setAction()方法設置唯一的一個action值。對于action測試,需要分兩種情況:

intent對象設置了action
如果intent對象通過調用setAction()方法設置了action的值,那么只有當組件的intent-filter中包含了intent對象中的action值的時候,action測試才通過,否則無法通過。
舉個例子,假設我們的Activity的intent-filter如下所示:

<intent-filter> <action android:name="com.ispring.action.ACTION_TEST1" /> <action android:name="com.ispring.action.ACTION_TEST2" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="ispring" android:host="blog.csdn.net" /></intent-filter>

下面的intent對象可以通過上面intent-filter里面的action測試:

Intent intent = new Intent();intent.setAction("com.ispring.action.ACTION_TEST1");Uri uri = Uri.parse("ispring://blog.csdn.net/sunqunsunqun");intent.setData(uri);

該intent之所以能通過action測試是因為intent-filter中包含該intent的action值com.ispring.action.ACTION_TEST1。

下面的intent對象無法通過上面intent-filter里面的action測試:

Intent intent = new Intent();intent.setAction("com.ispring.action.ACTION_TEST3");Uri uri = Uri.parse("ispring://blog.csdn.net/sunqunsunqun");intent.setData(uri);

該intent之所以無法通過action測試是因為intent-filter中不包含該intent的action值com.ispring.action.ACTION_TEST3。

intent對象沒有設置action
如果intent對象沒有調用setAction()方法設置action的值,那么如果intent-filter至少有一個任意的action的值,該intent對象就可以通過該intent-filter的action測試,反之,如果intent-filter中沒有定義任何的action,那么該intent無法通過該intent-filter的action測試。
舉個例子,假設我們的intent對象如下所示:

Intent intent = new Intent();//不設置action值//intent.setAction("com.ispring.action.ACTION_TEST1");Uri uri = Uri.parse("ispring://blog.csdn.net/sunqunsunqun");intent.setData(uri);

上面的intent對象可以通過如下的intent-filter:

<intent-filter> <action android:name="com.csdn.action.ACTION_XXX" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="ispring" android:host="blog.csdn.net" /></intent-filter>

上面的intent對象無法通過如下的intent-filter:

<intent-filter> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="ispring" android:host="blog.csdn.net" /></intent-filter>

通過上面的幾個示例,想必大家都已經理解了action測試的規則,至于上面的category和data標簽的使用,會在下面詳細介紹。

總結起來有兩點結論:
1. 要想讓intent對象通過action測試,那么intent-filter中聲明的action不能為空且要包含intent對象中的action值(如果intent的action值不為空的話)。
2. 如果intent-filter沒有聲明任何action,那么所有的intent的對象(即無論intent如何配置)都無法通過intent-filter的action測試。

Category測試

為了指定能夠接收并處理的Intent的類型,組件可以在intent-filter中聲明其支持0個或多個category,例如:

<intent-filter> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> ...</intent-filter>

intent對象有addCategory()方法,也就是說一個intent對象也可以關聯多個category。為了能讓intent對象通過intent-filter的category測試,intent對象中的所有category都要在intent-filter中找到對應項。
具體來說,又分為如下兩種情況:

  • intent對象至少有一個category

這種情況下,假設intent對象有N個category(N >=1),那么intent-filter中必須要包含這N個category,intent對象才能通過category測試,否則無法通過測試。如果用intent對象啟動Activity,還有其他限制條件,會在后面詳細說明。
舉個例子,假設我們的intent-filter如下所示:

<intent-filter> <action android:name="com.ispring.action.ACTION_TEST1" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="com.ispring.category.TEST1" /> <category android:name="com.ispring.category.TEST2" /></intent-filter>

以下intent對象能夠通過category測試

Intent intent = new Intent();intent.setAction("com.ispring.action.ACTION_TEST1");intent.addCategory("com.ispring.category.TEST1");intent.addCategory("com.ispring.category.TEST2");

該intent對象之所以可以通過category測試是因為intent-filter包含了該intent對中所有的category值:com.ispring.category.TEST1”和com.ispring.category.TEST2。

以下intent對象無法通過category測試

Intent intent = new Intent();intent.setAction("com.ispring.action.ACTION_TEST1");intent.addCategory("com.ispring.category.TEST1");intent.addCategory("com.ispring.category.TEST3");

該intent之所以無法通過上面的intent-filter的category測試是因為intent-filter只包含了該intent中值為com.ispring.category.TEST1的category,而并未包含值為com.ispring.category.TEST3的category,不滿足完全包含intent中全部category的情況。

  • intent對象不包含任何category

如果intent對象沒有調用過addCategory()方法,那么intent對象就不包含任何的category。這種情形下,如果該intent不是用來啟動Activity的話,那么無論intent-filter中category中如何配置,intent對象總是能通過intent-filter的category測試,即便intent-filter中沒有聲明任何的category,intent都能通過category測試。此處強調了該intent不是用來啟動Activity這種條件,會在下面詳細解釋。

此處需要特別說明的是,我們在上面所有的示例中,都給Activity的intent-filter添加了值為android.intent.category.DEFAULT的category,這是因為當我們把一個隱式的intent傳遞給startActivity()或startActivityForResult()方法時,Android會自動給該隱式intent添加值為android.intent.category.DEFAULT的category,所以為了能讓intent-filter包含intent中全部的category,我們就需要在Activity的intent-filter中添加該category,在使用時需要特別注意。

根據上面我們的幾個示例,我們總結如下:

1. 如果intent對象不包含任何category,并且該intent不是用來啟動Activity的,那么該intent對象總是能通過所有任意的intent-filter的category測試;
2. 如果intent對象包含category(至少一個),那么只有當intent-filter中聲明的category全部包含intent對象中的所有category的時候才通過category測試。
3. 如果允許Activity被隱式的Intent啟動,那么我們必須在該Activity的intent-filter中聲明值為android.intent.category.DEFAULT的category。

Data測試

為了指定可以接收的Intent的data,intent-filter需要聲明0個多多個<data />標簽,例如:

<intent-filter> <data android:mimeType="video/mpeg" android:scheme="http" ... /> <data android:mimeType="audio/mpeg" android:scheme="http" ... /> ...</intent-filter>

每個<data />標簽都可以指定一個URI結構以及data的MIME類型。一個完整的URI由scheme、host、port和path組成,其結構如下所示:

<scheme>://<host>:<port>/<path>

其中scheme既可以是Android中常見的協議,也可以是我們自定義的協議。Android中常見的協議包括content協議、http協議、file協議等,自定義協議可以使用自定義的字符串。

  • 如下是一個content協議的URI:

content://com.example.project:200/folder/subfolder/etc
在該URI中,scheme是content,host是com.example.project,port是200,path是folder/subfolder/etc。

  • 如下是一個自定義協議的URI:

ispring://blog.csdn.net/sunqunsunqun
在該URI中,scheme是ispring,host是blog.csdn.net,沒有明確設定port,path是sunqunsunqun。

組成URI的這些屬性在<data />標簽中都是可選的 ,但存在如下的依賴關系:

  • 如果沒有指定scheme,那么host參數會被忽略
  • 如果沒有指定host,那么port參數會被忽略
  • 如果scheme和host都沒有指定,path參數會被忽略

當我們將intent對象中的Uri參數與intent-filter中的<data />標簽指定的URI格式進行對別時,我們我們只對比intent-filter的<data />標簽指定的部分,例如:

如果intent-filter中只指定了scheme,那么所有帶有該sheme的URI都能匹配到該intent-filter。
如果intent-filter中只指定了scheme和authority(authority包括host和port兩部分)而沒有指定path,那么所有具有相同scheme和authority的URI都能匹配到該intent-filter,而不用考慮path為何值。
如果intent-filter中同時指定了scheme、authority和path,那么只有具有相同scheme、authority和path的URI才能匹配到該intent-filter。
需要注意的是,intent-filter的<data />標簽在指定path的值時,可以在里面使用通配符*,起到部分匹配的效果。

data測試需要同時將intent對象中的URI、MIME類型與intent-filter的<data />標簽中指定的URI、MIME類型進行對比。
我們知道一個intent-filter下可以有多個<data />標簽,intent對象無需通過所有的<data />標簽測試,一般情況下,我們的intent對象只需通過了其中一個<data />標簽的測試并滿足某些特定情形下的一些條件,那么該intent對象就通過了該intent-filter的data測試。
進行對比的規則分以下幾種情況:

  • intent對象不包含URI和MIME類型

這種情況下,只有當intent-filter也沒有指定任何URI和MIME類型的時候才能通過data測試。
例如我們有如下intent對象:

Intent intent = new Intent();intent.setAction("com.ispring.action.ACTION_TEST1");

上面的intent對象可以通過下面的intent-filter的data測試:

<intent-filter> <action android:name="com.ispring.action.ACTION_TEST1" /> <category android:name="android.intent.category.DEFAULT" /></intent-filter>

上面的intent對象無法通過下面的intent-filter測試:

<intent-filter> <action android:name="com.ispring.action.ACTION_TEST1" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="ispring" /></intent-filter>
  • intent對象包含URI但不包含MIME類型

這種情況下,只有當intent對象的URI匹配到了intent-filter中的URI格式,并且intent-filter沒有指定MIME類型的時候才能通過data測試。需要注意的是,這里所說的intent-filter沒有指定MIME類型的情形指的是intent-filter中所有的<data />標簽都沒有指定MIME類型,即整個intent-filter中完全沒有android:mimeType這幾個字,理解這點很重要,大家在下面的幾個示例中可以體會到這點。
例如有如下intent對象:

Intent intent = new Intent();intent.setAction("com.ispring.action.ACTION_TEST1");Uri uri = Uri.parse("ispring://blog.csdn.net/sunqunsunqun");intent.setData(uri);

上面的intent能通過如下的intent-filter的data測試:

<intent-filter> <action android:name="com.ispring.action.ACTION_TEST1" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="ispring" android:host="blog.csdn.net" /></intent-filter>

上面的intent對象可以通過以下intent-filter的data測試:

<intent-filter> <action android:name="com.ispring.action.ACTION_TEST1" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="ispring" android:host="blog.csdn.net" /> <data android:scheme="sunqun" android:host="8080" /></intent-filter>

intent對象雖然不能通過scheme為sunqun的<data />標簽測試,但是可以通過scheme為ispring的data標簽測試,且intent對象和intent-filter中的兩個<data />標簽都沒有指定MIME,所以上面的intent對象可以通過該intent-filter測試。

上面的intent對象無法通過以下intent-filter的<data />標簽測試:

<intent-filter> <action android:name="com.ispring.action.ACTION_TEST1" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" android:scheme="ispring" android:host="blog.csdn.net" /></intent-filter>

上面的intent對象之所以不能通過intent-filter中唯一的一個<data />標簽測試是因為我們的intent對象沒有指定MIME類型,但是上面的<data />標簽通過android:mimeType="text/plain"設置了MIME類型。

上面的intent對象無法通過以下intent-filter的data測試:

<intent-filter> <action android:name="com.ispring.action.ACTION_TEST1" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="ispring" android:host="blog.csdn.net" /> <data android:mimeType="text/plain" /></intent-filter>

上面的intent對象之所以無法通過該intent-filter中的data測試,是因為intent對象沒有設置MIME類型,但是intent-filter中第二個data標簽通過android:mimeType="text/plain"設置了MIME類型。

intent對象包含MIME類型但不包含URI
這種情況下,只有當intent中的MIME類型與intent-filter中列出的MIME類型相同,并且intent-filter沒有指定任何的URI格式的時候才能通過data測試。需要注意的是,這里所說的intent-filter沒有指定任何的URI格式的情形指的是intent-filter中所有<data />標簽都沒有指定URI,即整個intent-filter中完全沒有android:scheme、android:host、android:port以及android:path,理解這點很重要,大家在下面的幾個示例中可以體會到這點。
例如有如下intent對象:

Intent intent = new Intent();intent.setAction("com.ispring.action.ACTION_TEST1");intent.setType("text/plain");

上面的intent對象可以通過以下intent-filter的data測試:

<intent-filter> <action android:name="com.ispring.action.ACTION_TEST1" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /></intent-filter>

上面的intent對象可以通過下面的intent-filter的data測試:

<intent-filter> <action android:name="com.ispring.action.ACTION_TEST1" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="image/*" /> <data android:mimeType="text/plain" /></intent-filter>

上面的intent對象雖然沒有通過MIME類型為image/*的第一個data標簽測試,但能通過第二個data標簽測試,并且intent對象和intent-filter都沒有指定任何的URI格式。

上面的intent對象不能通過以下intent-filter中的data測試:

<intent-filter> <action android:name="com.ispring.action.ACTION_TEST1" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" android:scheme="ispring" /></intent-filter>

上面的intent對象中沒有設置URI信息,但是在該intent-filter中設置了URI中的scheme值,所以intent無法通過intent-filter的data測試。

上面的intent對象無法通過以下intent-filter中的data測試:

<intent-filter> <action android:name="com.ispring.action.ACTION_TEST1" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> <data android:scheme="ispring" /></intent-filter>

上面的intent對象沒有指定URI信息,但是上面的intent-filter中第二個<data />標簽設置了URI中的scheme信息,所以intent對象無法通過該intent-filter的data測試。

intent對象同時包含URI和MIME類型
這種情況下,要分別測試URI以及MIME類型測試是否通過,只有URI以及MIME測試都通過了,data測試才能通過。

對于MIME測試:如果intent的MIME類型能夠匹配intent-filter中列出的某一個<data />標簽中的MIME類型值,那么MIME類型測試就通過了。
對于URI測試:
又細分兩種情況,滿足下面的任何一種情況都可以通過URI測試。
如果intent的URI格式能夠匹配intent-filter中列出的某一個<data />中的URI,那么URI測試就通過了。
如果intent的URI是content:協議或file:協議,并且整個intent-filter的所有<data />標簽中都沒有指定URI,那么該intent也能通過URI測試。換句話說,如果一個intent-filter只列出了MIME類型,沒有列出任何URI相關的格式的話,那么這個intent-filter就默認是支持content:協議或file:協議的。
下面舉幾個例子大家自己體會一下。

假設有如下協議為自定義協議ispring:的intent對象:

Intent intent = new Intent();intent.setAction("com.ispring.action.ACTION_TEST1");Uri uri = Uri.parse("ispring://blog.csdn.net/sunqunsunqun");String type = "text/plain";intent.setDataAndType(uri, type);

上面的intent對象可以通過下面的intent-filter的data測試:

<intent-filter>  <action android:name="com.ispring.action.ACTION_TEST1" />  <category android:name="android.intent.category.DEFAULT" />  <data android:scheme="ispring" android:host="blog.csdn.net" />  <data android:mimeType="text/plain" /></intent-filter>

上面的intent對象無法通過下面的intent-filter的data測試:

<intent-filter>  <action android:name="com.ispring.action.ACTION_TEST1" />  <category android:name="android.intent.category.DEFAULT" />  <data android:scheme="ispring" android:host="blog.csdn.net" android:port="8080" />  <data android:mimeType="text/plain" /></intent-filter>

port不滿足,URI測試不通過,導致data測試失敗。

上面的intent對象無法通過下面的intent-filter的data測試:

<intent-filter>  <action android:name="com.ispring.action.ACTION_TEST1" />  <category android:name="android.intent.category.DEFAULT" />  <data android:scheme="ispring" android:host="blog.csdn.net" />  <data android:mimeType="image/*" /></intent-filter>

android:mimeType不滿足,MIME類型測試不通過,導致data測試失敗。

假設有如下協議為content:的intent對象:

Intent intent = new Intent();intent.setAction("com.ispring.action.ACTION_TEST1");Uri uri = Uri.parse("content://com.ispring.test");String type = "text/plain";intent.setDataAndType(uri, type);

上面的intent對象無法通過下面的intent-filter的data測試:

<intent-filter>  <action android:name="com.ispring.action.ACTION_TEST1" />  <category android:name="android.intent.category.DEFAULT" />  <data android:scheme="ispring" />  <data android:mimeType="text/plain" /></intent-filter>

URI中的scheme不匹配,導致URI測試不通過,導致data測試失敗。

上面的intent對象可以通過下面的intent-filter的data測試:

<intent-filter>  <action android:name="com.ispring.action.ACTION_TEST1" />  <category android:name="android.intent.category.DEFAULT" />  <data android:mimeType="text/plain" /></intent-filter>

intent中使用的是content:協議,并且整個intent-filter中都沒有定義URI格式,所以URI測試是可以通過的,并且MIME類型能找到匹配項,所以可以通過data測試。

綜上,我們就完成了對Intent中action、category、data測試的詳細解釋,本文所有示例代碼均在Android Studio 1.0正式版中驗證過沒有問題。很感謝大家能夠耐心讀完本博文,希望本文對大家正確使用Intent過濾器有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
正在播放国产一区| 国内精品伊人久久| 久久久91精品国产一区不卡| 黄网站色欧美视频| 中文字幕日韩在线视频| 色久欧美在线视频观看| 久久91亚洲人成电影网站| 91免费国产网站| 国产精品三级久久久久久电影| 日韩精品在线电影| 97色在线视频观看| 久热精品视频在线| 久久久久久久久久久免费| 欧美另类极品videosbest最新版本| 成人在线视频福利| 伊人男人综合视频网| 91精品国产免费久久久久久| 亚洲韩国欧洲国产日产av| 日韩有码在线观看| 热久久视久久精品18亚洲精品| www.欧美视频| 欧美国产日韩中文字幕在线| 亚洲xxxx3d| 国产精品偷伦免费视频观看的| 91在线视频成人| 91色精品视频在线| 亚洲精品色婷婷福利天堂| 色噜噜狠狠狠综合曰曰曰88av| 一区二区亚洲欧洲国产日韩| 欧美日韩国产一中文字不卡| 欧美日韩一区二区免费在线观看| 久久69精品久久久久久久电影好| 欧美高清videos高潮hd| 国产精品福利久久久| 亚洲欧洲成视频免费观看| 国产成人精品免高潮在线观看| 中文字幕日韩有码| 亚洲电影免费观看高清完整版在线观看| 久久人体大胆视频| 亚洲精品国产精品乱码不99按摩| 日韩风俗一区 二区| 国产亚洲综合久久| 欧美黑人xxx| 国产精品极品美女在线观看免费| 精品偷拍一区二区三区在线看| 琪琪亚洲精品午夜在线| 日韩在线视频网| 久久久精品影院| 最新91在线视频| 亚洲天堂av图片| 免费av在线一区| 国产亚洲精品美女| 69av成年福利视频| 亚洲美女喷白浆| 国产精品一区电影| 欧美精品在线极品| 国产精品99久久久久久www| 欧美激情亚洲国产| 国产欧美在线视频| 成人免费淫片aa视频免费| 欧美尺度大的性做爰视频| 亚洲永久在线观看| 国产精品久久久av久久久| xvideos亚洲| 欧美一级片久久久久久久| 国产精品自拍偷拍| 欧美激情网站在线观看| 日韩小视频网址| 国产精品久久久久久久久免费| 国产精品女视频| 国产日韩欧美视频在线| 亚洲精品一区久久久久久| 亚洲无亚洲人成网站77777| 91色视频在线观看| 日韩黄色高清视频| 国产欧美日韩专区发布| www.欧美三级电影.com| 欧美一区二区三区艳史| 国产精品久久久久久久久久久久久久| 欧美在线免费观看| 色琪琪综合男人的天堂aⅴ视频| 美女视频黄免费的亚洲男人天堂| 欧美老女人在线视频| 亚洲美女av在线播放| 亚洲精品久久久久中文字幕二区| 精品国内自产拍在线观看| 日韩精品在线观看网站| 国产精品18久久久久久首页狼| 亚洲性av在线| 亚洲女在线观看| 日本久久久久久久| 亚洲一区二区三区sesese| 亚洲精品中文字幕有码专区| 国产成人精品av| yw.139尤物在线精品视频| 日韩精品视频在线观看免费| 韩剧1988免费观看全集| 亚洲伊人成综合成人网| 欧美国产在线视频| 久久久久久久久久婷婷| 日韩亚洲精品电影| 欧美日韩国产精品一区二区三区四区| 91久久在线视频| 国产精品美女www爽爽爽视频| 国产精品黄页免费高清在线观看| 国产精品成人久久久久| 国产97色在线| 久久琪琪电影院| 成人性生交大片免费看视频直播| 日韩精品中文字幕有码专区| 69av在线视频| 亚洲色图欧美制服丝袜另类第一页| 欧美视频第一页| 久久理论片午夜琪琪电影网| 欧美性猛交丰臀xxxxx网站| 一区二区在线免费视频| 中文字幕欧美精品在线| 日韩精品视频在线免费观看| 日韩免费高清在线观看| 亚洲的天堂在线中文字幕| 亚洲第一二三四五区| 欧美黄色三级网站| 国产精品日日做人人爱| 在线播放日韩欧美| 日韩欧美在线视频日韩欧美在线视频| 久久精品成人动漫| 欧美午夜视频在线观看| 日韩欧美在线视频| 国产欧美va欧美va香蕉在| 亚洲激情在线观看视频免费| 欧美国产日产韩国视频| 日韩中文字幕网址| 538国产精品一区二区免费视频| 成人黄色免费在线观看| 欧美理论电影在线播放| 国产+人+亚洲| 国产精品电影久久久久电影网| 亚洲va男人天堂| 欧美乱大交xxxxx另类电影| 亚洲美女av在线播放| 福利微拍一区二区| 中文字幕一精品亚洲无线一区| 亚洲精品影视在线观看| 国产成人av在线播放| 午夜精品国产精品大乳美女| 日韩中文字幕第一页| 欧美国产亚洲视频| 欧美成人精品影院| 亚洲最大福利视频网站| 色多多国产成人永久免费网站| 亚洲毛片一区二区| 一区三区二区视频| 在线观看日韩av| 国产精品久久99久久| 午夜精品久久久久久久99热| 日韩中文字幕免费看| 国产精品一区av| 亚洲国产精品va在看黑人| 亚洲一区二区三区在线免费观看| 色偷偷91综合久久噜噜| 97视频在线观看免费| 亚洲国产欧美在线成人app| 亚洲视频欧美视频| 亚洲日韩欧美视频一区|