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

卡片服務開發(fā)之如何開發(fā)一個地圖服務卡片

開發(fā) 前端
卡片現(xiàn)有支持的基礎組件有:button、calendar、chart、clock、divider、image、input、progress、span、text可以看到現(xiàn)有的卡片組件并不支持地圖的開發(fā),那么如何在卡片上顯示地圖尼?

[[413808]]

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

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

https://harmonyos.51cto.com

前言

處于隱私保護借用熊貓基地定位,代碼層實現(xiàn)了獲取實時定位功能。

效果圖

卡片效果2x2+2x44x4縮放

關鍵技術及實現(xiàn)原理

卡片現(xiàn)有支持的基礎組件有:button、calendar、chart、clock、divider、image、input、progress、span、text

可以看到現(xiàn)有的卡片組件并不支持地圖的開發(fā),那么如何在卡片上顯示地圖尼?

通過image組件+高德地圖WebAPI的靜態(tài)地圖即可實現(xiàn)地圖的顯示。

-以上方便有開發(fā)卡片經驗的開發(fā)者提供思路,具體方式方法如下

從零開始

創(chuàng)建項目

打開DevEco Studio工具,點擊File->New->New Project創(chuàng)建一個Empty Ability(JS)如下圖:

SDK選用API 5

創(chuàng)建后的結構:

卡片服務開發(fā)之如何開發(fā)一個地圖服務卡片-鴻蒙HarmonyOS技術社區(qū)

首先修改程序的配置文件:

打開config.json,修改卡片支持類型情況:

卡片服務開發(fā)之如何開發(fā)一個地圖服務卡片-鴻蒙HarmonyOS技術社區(qū)

添加權限:

卡片服務開發(fā)之如何開發(fā)一個地圖服務卡片-鴻蒙HarmonyOS技術社區(qū)

配置完成還需要在MainAbility中顯示的申明使用權限信息,詳情參考文檔配置相關內容:

打開MainAbility添加方法:

  1. //獲取權限 
  2.    private void requestPermission() { 
  3.        String[] permission = { 
  4.                "ohos.permission.LOCATION"
  5.                "ohos.permission.LOCATION_IN_BACKGROUND"
  6.        }; 
  7.        List<String> applyPermissions = new ArrayList<>(); 
  8.        for (String element : permission) { 
  9.            if (verifySelfPermission(element) != 0) { 
  10.                if (canRequestPermission(element)) { 
  11.                    applyPermissions.add(element); 
  12.                } 
  13.            } 
  14.        } 
  15.        requestPermissionsFromUser(applyPermissions.toArray(new String[0]), 0); 
  16.    } 

并在onStart方法中調用requestPermission();方法。

修改界面:

打開widget下的pages/index/imdex.hml

  1. <div class="container"
  2.         <div class="container-inner" > 
  3.             <div class="container-img"
  4.                 <stack> 
  5.                     <image src="{{imgSrc}}" class="bg-img"></image> 
  6.                     <div class="container-show-text" > 
  7.                         <text class="show-text" >當前檢索項:</text> 
  8.                         <text class="show-text" style="color: coral;"  >{{searchText}}</text> 
  9.                     </div> 
  10.                      
  11.                     <div class="container-map-ctl"
  12.                         <button class="map-ctl-btn" @click="mapAddEvent"  type="circle">+</button> 
  13.                         <button class="map-ctl-btn" @click="mapReduceEvent"  type="circle">-</button> 
  14.                     </div> 
  15.                     <div show="{{showCtlButton}}" class="container-ctl" > 
  16.                         <button class="ctl-btn" @click="searchCheckedEvent0">{{searchBtns[0]}}</button> 
  17.                         <button class="ctl-btn" @click="searchCheckedEvent1">{{searchBtns[1]}}</button> 
  18.                         <button class="ctl-btn" @click="searchCheckedEvent2">{{searchBtns[2]}}</button> 
  19.                         <button class="ctl-btn" @click="searchCheckedEvent3">{{searchBtns[3]}}</button> 
  20.                         <button class="ctl-btn" @click="searchCheckedEvent4">{{searchBtns[4]}}</button> 
  21.                     </div> 
  22.                 </stack> 
  23.             </div> 
  24.         </div> 
  25. </div> 

需要注意:卡片的事件不能使用表達式,不能使用for語句循環(huán)構建

樣式調整文件pages/index/imdex.css:

  1. .container { 
  2.     flex-direction: column
  3.     justify-content: center; 
  4.     align-items: center; 
  5.  
  6. .bg-img { 
  7.     flex-shrink: 0; 
  8.     height: 100%; 
  9.     object-fit: cover; 
  10.  
  11. .container-ctl{ 
  12.     opacity: 0.9; 
  13.     width: 100%; 
  14.     height: 100%; 
  15.     justify-content: center; 
  16.     flex-direction: row; 
  17.     align-items: flex-end
  18.     bottom: 3px; 
  19. .ctl-btn{ 
  20.     padding: 3px 6px; 
  21.     margin:3px 6px; 
  22.     font-size: 12px; 
  23.     border-radius: 3px; 
  24.     background-color: #409eff; 
  25.     border: 1px solid #cbcbcb; 
  26.     box-shadow: 1px 1px 3px #a8a8a8; 
  27. .container-map-ctl{ 
  28.     opacity: 0.8; 
  29.     justify-content: flex-end
  30.     margin-right: 3px; 
  31. .map-ctl-btn{ 
  32.     background-color: #409eff; 
  33.     border: 1px solid #cbcbcb; 
  34.     box-shadow: 1px 1px 3px #a8a8a8; 
  35.     width: 24px; 
  36.     height: 24px; 
  37.     margin:3px; 
  38.  
  39. .container-show-text{ 
  40.     padding: 9px; 
  41. .show-text{ 
  42.     font-size: 8px; 
  43.     font-weight: bolder; 
  44.  

json配置信息修改pages/index/index.json:

  1.   "data": { 
  2.     "showCtlButton"false,//是否顯示button。由Java傳值且在2x2的界面不顯示 
  3.     "imgSrc""/common/ic_default_image@3x.png",//默認圖片 
  4.     "searchText"""
  5.     "searchBtns": []//配置的button按鈕信息 
  6.   }, 
  7.   "actions": { 
  8.     "searchCheckedEvent0": { 
  9.       "action""message"
  10.       "params": { 
  11.         "index": 0, 
  12.         "name""checkSearch" 
  13.       } 
  14.     }, 
  15.     "searchCheckedEvent1": { 
  16.       "action""message"
  17.       "params": { 
  18.         "index": 1, 
  19.         "name""checkSearch" 
  20.       } 
  21.     }, 
  22.     "searchCheckedEvent2": { 
  23.       "action""message"
  24.       "params": { 
  25.         "index": 2, 
  26.         "name""checkSearch" 
  27.       } 
  28.     }, 
  29.     "searchCheckedEvent3": { 
  30.       "action""message"
  31.       "params": { 
  32.         "index": 3, 
  33.         "name""checkSearch" 
  34.       } 
  35.     }, 
  36.     "searchCheckedEvent4": { 
  37.       "action""message"
  38.       "params": { 
  39.         "index": 4, 
  40.         "name""checkSearch" 
  41.       } 
  42.     }, 
  43.     "mapAddEvent": { 
  44.       "action""message"
  45.       "params": { 
  46.         "name""mapAdd" 
  47.       } 
  48.     }, 
  49.     "mapReduceEvent": { 
  50.       "action""message"
  51.       "params": { 
  52.         "name""mapReduce" 
  53.       } 
  54.     } 
  55.   } 

后臺邏輯

由于更新卡片時需要提供formId,我們對FormController及FormControllerManager這兩個幫助類進行一個修改。

打開java目錄下的FormController文件并添加受保護的屬性 formId,并修改構造函數(shù)。

然后進入FormControllerManager找到createFormController、getController、newInstance進行修改。

createFormController:

在newInstance方法中添加參數(shù)formId,如下圖:

getController:

在newInstance方法中添加參數(shù)formId,如下圖:

newInstace:

該方法是動態(tài)的創(chuàng)建WidgetImpl方法,類似于IOC作用。

找到java目錄下的widget/widget/widgetImpl,卡片的所有邏輯都在該文件內

首先修改構造函數(shù)及定義基礎屬性等

因上述修改了FormController及FormControllerManager構造函數(shù)必須增加Long formId參數(shù)

  1. private static Location slocation=null;//當前位置信息 
  2.    private Boolean slocationChanged=false;//位置是否修改 
  3.    private  int dimension=2;//當前卡片模式  2x2=2;2x4=3;4x4=4; 
  4.    private List<String> defualtBtn=new ArrayList<>();//界面下方的按鈕列表 
  5.    private static Locator locator=null;//坐標獲取類 
  6.    private LocatorCallBack locatorCallBack=new LocatorCallBack();//坐標獲取后返回調用類 
  7.    private int mRoom=16;//靜態(tài)地圖顯示層級 
  8.    private String markType="";//靜態(tài)地圖周邊搜索關鍵字 
  9.    private String mSize="500*500";//靜態(tài)地圖大小 
  10.    private List<String> mKeyLocation=new ArrayList<>();//靜態(tài)地圖獲取周邊標記的坐標 
  11.    RequestParam requestParam = new RequestParam(RequestParam.PRIORITY_ACCURACY, 20, 0); 
  12.  
  13.  
  14.    public WidgetImpl(Context context, String formName, Integer dimension,Long formId) { 
  15.        super(context, formName, dimension,formId); 
  16.        this.dimension=dimension; 
  17.        //獲取當前定位 
  18.        if(locator==null){ 
  19.            locator=new Locator(context); 
  20.            locator.startLocating(requestParam,locatorCallBack); 
  21.        } 
  22.        switch (dimension){ 
  23.            case 2:{ 
  24.                mSize="300*300"
  25.                mRoom=13; 
  26.                break; 
  27.            } 
  28.            case 3:{ 
  29.              mSize="500*250"
  30.              mRoom=13; 
  31.              break; 
  32.            } 
  33.            case 4:{ 
  34.                mSize="500*500"
  35.                mRoom=15; 
  36.                break; 
  37.            } 
  38.        } 
  39.    } 
  40.  
  41.    public class LocatorCallBack implements LocatorCallback{ 
  42.  
  43.        @Override 
  44.        public void onLocationReport(Location location) { 
  45.            slocation=location; 
  46.            //周邊信息接口額度有限,限制為當坐標改變時刷新坐標mark信息,并更新卡片 
  47.            if(location==slocation || slocation==null
  48.                return
  49.            refreshMark(); 
  50.            updateFormData(formId); 
  51.        } 
  52.  
  53.        @Override 
  54.        public void onStatusChanged(int i) { 
  55.  
  56.        } 
  57.  
  58.        @Override 
  59.        public void onErrorReport(int i) { 
  60.  
  61.        } 
  62.    } 

修改createFormController,該方法在卡片創(chuàng)建時調用,我們需要把頁面需要的參數(shù)傳遞過去

注意網絡圖片需要使用“通過內存圖片方式使用image組件”

  1. @Override 
  2.    public ProviderFormInfo bindFormData(){ 
  3.        defualtBtn=new ArrayList<>(); 
  4.        defualtBtn.add("酒店"); 
  5.        defualtBtn.add("餐飲"); 
  6.        defualtBtn.add("景點"); 
  7.        defualtBtn.add("加油站"); 
  8.        if(defualtBtn.size()<5){ 
  9.            for(int i=defualtBtn.size();i<5;i++){ 
  10.                defualtBtn.add("未設置"); 
  11.            } 
  12.        } 
  13.        this.markType=defualtBtn.get(0); 
  14.        this.refreshMark(); 
  15.        FormBindingData formBindingData=null
  16.        ZSONObject zsonObject =new ZSONObject(); 
  17.        zsonObject.put("imgSrc","memory://amap.png"); 
  18.        zsonObject.put("showCtlButton",this.dimension!=2); 
  19.        zsonObject.put("searchBtns",defualtBtn); 
  20.        zsonObject.put("searchText",markType); 
  21.        formBindingData=new FormBindingData(zsonObject); 
  22.        ProviderFormInfo formInfo = new ProviderFormInfo(); 
  23.        formInfo.setJsBindingData(formBindingData); 
  24.        String amapUrl=getMapImageUrl(mKeyLocation); 
  25.        byte[] bytes= HttpImageUtils.doGetRequestForFile(amapUrl); 
  26.        formBindingData.addImageData("amap.png",bytes); 
  27.        return formInfo; 
  28.    } 

初始化卡片后改進onTriggerFormEvent

該方法為接收卡片事件,message為事件傳遞的params參數(shù)

  1. @Override 
  2.   public void onTriggerFormEvent(long formId, String message) { 
  3.       ZSONObject request=ZSONObject.stringToZSON(message); 
  4.       String EventName=request.getString("name"); 
  5.       switch (EventName){ 
  6.           case "checkSearch":{ 
  7.               int index=request.getIntValue("index"); 
  8.               markType=defualtBtn.get(index); 
  9.               this.refreshMark(); 
  10.               break; 
  11.           } 
  12.           case "mapAdd":{ 
  13.               if(mRoom<17){ 
  14.                   mRoom+=1; 
  15.               } 
  16.               break; 
  17.           } 
  18.           case "mapReduce":{ 
  19.               if(mRoom>0){ 
  20.                   mRoom-=1; 
  21.               } 
  22.               break; 
  23.           } 
  24.       } 
  25.       updateFormData(formId); 
  26.   } 

修改更新卡片信息的方法(此方法不僅是系統(tǒng)會定時刷新,也有主動刷新的調用如:卡片事件改變后調用,坐標改變后的調用,這也是需要修改FormController、FormControllerManager增加formId屬性的原因,因為在主動刷新時需要formId參數(shù))

此處還有一個重點就是 ((Ability)context).updateForm(formId,bindingData);

  1. @Override 
  2.    public void updateFormData(long formId, Object... vars) { 
  3.        ZSONObject zsonObject=new ZSONObject(); 
  4.        zsonObject.put("searchBtns",defualtBtn); 
  5.        zsonObject.put("searchText",markType); 
  6.        String mapName="amap"+System.currentTimeMillis()+".png"
  7.        zsonObject.put("imgSrc","memory://"+mapName); 
  8.        FormBindingData bindingData = new FormBindingData(zsonObject); 
  9.        String amapUrl=getMapImageUrl(mKeyLocation); 
  10.        byte[] bytes= HttpImageUtils.doGetRequestForFile(amapUrl); 
  11.        bindingData.addImageData(mapName,bytes); 
  12.        try{ 
  13.            ((Ability)context).updateForm(formId,bindingData); 
  14.        }catch (Exception ex){ 
  15.            ex.printStackTrace(); 
  16.        } 
  17.  
  18.    } 

其它一些上述方法中調用的私有方法及類

私有方法:

  1. private void refreshMark(){ 
  2.       try{ 
  3.           this.mKeyLocation= HttpImageUtils.SearchByKeyUrl(getMapMarkUrl(10)); 
  4.       }catch (Exception ex){ 
  5.           ex.printStackTrace(); 
  6.       } 
  7.   } 
  8.  
  9.   private String getMapImageUrl(List<String> Position){ 
  10.       String url="https://restapi.amap.com/v3/staticmap"
  11.       String params="key="
  12.       params+="&zoom="+mRoom; 
  13.       params+="&size="+mSize; 
  14.       if(slocation!=null
  15.           params+="&location="+slocation.getLongitude()+","+slocation.getLatitude(); 
  16.       params+="&markers=large,0xea7700,H:"+slocation.getLongitude()+","+slocation.getLatitude(); 
  17.       if(Position==null || Position.size()==0) 
  18.           return  url+"?"+params; 
  19.       String markers="|mid,0xFF0000,:"
  20.  
  21.       for(int i=0;i<Position.size();i++){ 
  22.           markers+=Position.get(i)+";"
  23.       } 
  24.       params+=markers.substring(0,markers.length()-1); 
  25.       return url+"?"+params; 
  26.   } 
  27.  
  28.   private  String getMapMarkUrl(int size){ 
  29.       String Url="https://restapi.amap.com/v5/place/around?key="
  30.       Url+="&keywords="+(markType=="未設置"?"":markType); 
  31.       if(slocation!=null
  32.           Url+="&location="+slocation.getLongitude()+","+slocation.getLatitude(); 
  33.       Url+="&size="+size
  34.       return Url; 
  35.   } 

HttpImageUtils類

  1. package com.panda_coder.amapcard.utils; 
  2.  
  3. import com.panda_coder.amapcard.MainAbility; 
  4. import ohos.hiviewdfx.HiLog; 
  5. import ohos.hiviewdfx.HiLogLabel; 
  6. import ohos.utils.zson.ZSONArray; 
  7. import ohos.utils.zson.ZSONObject; 
  8.  
  9. import java.io.*; 
  10. import java.net.HttpURLConnection; 
  11. import java.net.URL; 
  12. import java.util.ArrayList; 
  13. import java.util.List; 
  14.  
  15. public class HttpImageUtils { 
  16.     private static final HiLogLabel TAG = new HiLogLabel(HiLog.DEBUG, 0x0, MainAbility.class.getName()); 
  17.  
  18.     public final static byte[] doGetRequestForFile(String urlStr) { 
  19.         InputStream is = null
  20.         HttpURLConnection conn = null
  21.         byte[] buff = new byte[1024]; 
  22.         try { 
  23.             URL url = new URL(urlStr); 
  24.             conn = (HttpURLConnection) url.openConnection(); 
  25.  
  26.             conn.setDoInput(true); 
  27.             conn.setRequestMethod("GET"); 
  28.             conn.setReadTimeout(6000); 
  29.             conn.connect(); 
  30.             is = conn.getInputStream(); 
  31.             if (conn.getResponseCode() == 200) { 
  32.                 buff = readInputStream(is); 
  33.             } else
  34.                 buff=null
  35.             } 
  36.         } catch (Exception e) { 
  37.             HiLog.error(TAG,"【獲取圖片異常】",e); 
  38.         } 
  39.         finally { 
  40.             try { 
  41.                 if(is != null){ 
  42.                     is.close(); 
  43.                 } 
  44.             } catch (IOException e) { 
  45.                 e.printStackTrace(); 
  46.             } 
  47.             conn.disconnect(); 
  48.         } 
  49.  
  50.         return buff; 
  51.     } 
  52.  
  53.     public static byte[] readInputStream(InputStream is) { 
  54.         ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
  55.         byte[] buffer = new byte[1024]; 
  56.         int length = -1; 
  57.         try { 
  58.             while ((length = is.read(buffer)) != -1) { 
  59.                 baos.write(buffer, 0, length); 
  60.             } 
  61.             baos.flush(); 
  62.         } catch (IOException e) { 
  63.             e.printStackTrace(); 
  64.         } 
  65.         byte[] data = baos.toByteArray(); 
  66.         try { 
  67.             is.close(); 
  68.             baos.close(); 
  69.         } catch (IOException e) { 
  70.             e.printStackTrace(); 
  71.         } 
  72.         return data; 
  73.     } 
  74.  
  75.     public static String httpGet(String urlStr){ 
  76.         InputStream is = null
  77.         HttpURLConnection conn = null
  78.         String response=""
  79.         StringBuffer buffer = new StringBuffer(); 
  80.         try { 
  81.             URL url = new URL(urlStr); 
  82.             conn = (HttpURLConnection) url.openConnection(); 
  83.  
  84.             conn.setDoInput(true); 
  85.             conn.setRequestMethod("GET"); 
  86.             conn.setReadTimeout(6000); 
  87.             conn.connect(); 
  88.             is = conn.getInputStream(); 
  89.             if (conn.getResponseCode() == 200) { 
  90.                 String str=null
  91.                 InputStreamReader isr = new InputStreamReader(is,"utf-8"); 
  92.                 BufferedReader br = new BufferedReader(isr); 
  93.                 while((response = br.readLine())!=null){ 
  94.                     buffer.append(response); 
  95.                 } 
  96.             } 
  97.             response=buffer.toString(); 
  98.  
  99.         } catch (Exception e) { 
  100.             HiLog.error(TAG,"【訪問異常】",e); 
  101.         } 
  102.         finally { 
  103.             try { 
  104.                 if(is != null){ 
  105.                     is.close(); 
  106.                 } 
  107.             } catch (IOException e) { 
  108.                 e.printStackTrace(); 
  109.             } 
  110.             conn.disconnect(); 
  111.         } 
  112.         return response; 
  113.     } 
  114.  
  115.     public final  static List<String> SearchByKeyUrl(String urlStr){ 
  116.         List<String> result=new ArrayList<>(); 
  117.         String response= httpGet(urlStr); 
  118.         if(response==null || response==""
  119.             return result; 
  120.         ZSONObject zson=ZSONObject.stringToZSON(response); 
  121.         if(zson.getIntValue("infocode")!=10000) 
  122.             return result; 
  123.         ZSONArray zsonArray=zson.getZSONArray("pois"); 
  124.         for(int i=0;i<zsonArray.size();i++){ 
  125.             ZSONObject child= (ZSONObject)zsonArray.get(i); 
  126.             String location=child.getString("location"); 
  127.             result.add(location); 
  128.         } 
  129.         return result; 
  130.     } 

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

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

https://harmonyos.51cto.com

 

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

2023-04-07 09:20:55

2021-08-23 10:12:41

鴻蒙HarmonyOS應用

2021-09-18 09:57:20

鴻蒙HarmonyOS應用

2021-08-18 10:06:33

鴻蒙HarmonyOS應用

2021-06-21 15:21:52

鴻蒙HarmonyOS應用開發(fā)

2023-03-22 09:00:38

2021-09-15 10:19:15

鴻蒙HarmonyOS應用

2023-08-04 17:24:43

2022-04-24 15:26:38

服務卡鴻蒙

2023-06-20 15:45:15

服務卡片鴻蒙

2021-07-22 08:45:47

鴻蒙HarmonyOS應用

2021-06-23 16:05:05

鴻蒙HarmonyOS應用

2023-09-13 15:27:14

鴻蒙應用元服務

2021-07-07 14:03:12

鴻蒙HarmonyOS應用

2021-08-20 14:23:14

鴻蒙HarmonyOS應用

2022-05-09 11:52:38

Java卡片服務卡片

2023-09-18 15:12:47

服務卡片ArkTS

2021-09-09 15:07:36

鴻蒙HarmonyOS應用

2021-07-20 09:58:16

鴻蒙HarmonyOS應用
點贊
收藏

51CTO技術棧公眾號

亚洲精品久久嫩草网站秘色| 久久99热99| 日韩经典第一页| 成人3d动漫一区二区三区| av中文字幕在线| 国产一区二区三区蝌蚪| 久久久综合av| 久久久久久久久福利| 精品国产亚洲一区二区三区大结局| 亚洲一区在线视频| 日本午夜一区二区三区| 99热这里只有精品在线| 免播放器亚洲| 精品综合久久久久久97| 六月婷婷七月丁香| 秋霞影院一区| 欧美亚洲动漫另类| 欧美亚洲色图视频| 亚洲成人影院麻豆| 99精品欧美一区二区三区小说| 国产精品久久久久久久久免费看 | 欧美俄罗斯乱妇| 日本一卡二卡在线播放| 88久久精品| 欧美日韩成人高清| 99久久久无码国产精品6| 宅男在线观看免费高清网站| 国产欧美日韩在线看| 国内一区在线| 亚洲精品97久久中文字幕| 青青草97国产精品免费观看无弹窗版| 性欧美xxxx视频在线观看| 亚洲欧美精品久久| 精品国产99| 亚洲精品在线不卡| 激情综合激情五月| 欧美日韩国产一区二区在线观看| 欧美中文字幕一区二区三区| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 精灵使的剑舞无删减版在线观看| 综合在线观看色| 一区二区免费电影| 超碰免费在线观看| 欧美精彩视频一区二区三区| 精品久久久久久中文字幕动漫| a天堂在线视频| 国内精品伊人久久久久影院对白| 国产精品白丝jk喷水视频一区| 综合激情网五月| 国产精品久久久免费| 久久青草福利网站| 国产中文字字幕乱码无限| 欧美日韩国产亚洲一区| 九九视频直播综合网| caoporn91| 欧美 日韩 国产 一区| 精品国产一区二区三区久久狼5月 精品国产一区二区三区久久久狼 精品国产一区二区三区久久久 | 无码人妻一区二区三区免费n鬼沢| 色综合视频一区二区三区日韩| 欧美色老头old∨ideo| 网站一区二区三区| 久久婷婷五月综合色丁香| 欧美日韩国产综合一区二区三区| 杨幂毛片午夜性生毛片| 欧美性aaa| 欧美一区二区三区日韩| 久久久男人的天堂| 日本欧美高清| 中文字幕九色91在线| 潘金莲一级黄色片| 欧美网站在线| 5566日本婷婷色中文字幕97| 中文字幕一区二区人妻视频| 秋霞影院一区二区| 91老司机在线| 特级丰满少妇一级aaaa爱毛片| 91网站在线观看视频| 日韩av高清| 黄色动漫在线观看| 亚洲国产精品一区二区尤物区| 97xxxxx| 欧美色网一区| 欧美高清激情brazzers| 四虎永久免费观看| 欧美日韩国产在线观看网站 | 亚洲wwww| 3atv一区二区三区| 在线天堂www在线国语对白| 久久av综合| 久久在线免费观看视频| 800av免费在线观看| 日本欧美一区二区| 不卡视频一区二区三区| 黄色影院在线播放| 亚洲美女淫视频| 国产日韩一区二区在线观看| 国产成人福利夜色影视| 精品捆绑美女sm三区| 一区二区精品免费| 国产一区亚洲| 国产精品丝袜久久久久久高清| 亚洲成人第一区| 中文字幕不卡在线观看| 青青草精品视频在线| 另类一区二区三区| 亚洲精品电影网站| 亚洲av无码一区二区三区在线| 国产一区白浆| 97超碰人人看人人 | 国产成人久久777777| 亚洲欧美久久精品| 精品香蕉一区二区三区| 91aaa在线观看| 爽好久久久欧美精品| 成人av免费在线看| 成人在线观看亚洲| 色呦呦日韩精品| 国内自拍偷拍视频| 99国产**精品****| 国产不卡精品视男人的天堂| 欧美熟妇另类久久久久久不卡| 亚洲图片激情小说| 91最新在线观看| 天天躁日日躁狠狠躁欧美巨大小说| 久久亚洲国产成人| 在线观看一二三区| 国产性做久久久久久| 欧美视频在线观看网站| 日本在线一区二区三区| 日韩视频免费看| 日本丰满少妇做爰爽爽| 99久久99久久免费精品蜜臀| 欧美一区激情视频在线观看| 欧美aa免费在线| 亚洲成av人影院在线观看| 国产精品久久久精品四季影院| 蜜桃视频免费观看一区| 日韩国产一区久久| 亚洲成人短视频| 亚洲欧美第一页| 人妻丰满熟妇av无码区| 91尤物视频在线观看| 国产一区二区三区小说| 日韩欧美另类中文字幕| 久久福利网址导航| 91免费视频播放| 自拍偷拍亚洲激情| www.欧美激情.com| 91精品久久久久久久久久不卡| 国产欧美婷婷中文| 婷婷在线视频观看| 欧美日本一区二区三区四区| 人妻无码一区二区三区免费| 蜜桃视频一区二区三区在线观看| 午夜精品区一区二区三| 成人国产精品入口免费视频| 亚洲视频777| 国产又粗又猛又爽又| 国产欧美精品区一区二区三区| 婷婷丁香激情网| av资源久久| 成人黄色午夜影院| 自由的xxxx在线视频| 精品久久免费看| 欧美不卡视频在线观看| 2020国产精品| 天天操天天爱天天爽| 99热在线成人| 国产精品二区在线| 天堂中文在线播放| 中日韩美女免费视频网站在线观看 | eeuss影院www在线观看| 欧美日韩国产首页| 久久久久久久国产精品毛片| 99视频一区二区| 日韩欧美黄色大片| 最新国产精品| 久久精品中文字幕一区二区三区| 欧美性理论片在线观看片免费 | av成人影院在线| 亚洲人成亚洲人成在线观看| 91av国产精品| 欧美日韩国产精品一区| 999久久久国产| 成人看片黄a免费看在线| 欧美 激情 在线| 国产精品伦理久久久久久| 国产精品久久7| 澳门av一区二区三区| 欧美成人午夜免费视在线看片 | 日韩在线中文字幕| 少妇高潮一区二区三区99小说| 色域天天综合网| 黄色一级片在线| 久久久亚洲国产美女国产盗摄| 九九热精品国产| 国产日韩欧美在线播放不卡| 亚洲一区二三| 老司机成人在线| 91视频88av| 日韩电影网站| 久久久久久亚洲精品中文字幕| 国产视频福利在线| 精品国产99国产精品| 在线观看xxxx| 精品久久久免费| 欧美片一区二区| 国产精品传媒入口麻豆| 久久亚洲AV成人无码国产野外| 国产伦精品一区二区三区视频青涩| 精品中文字幕av| 亚洲婷婷免费| 午夜探花在线观看| av影片在线一区| 欧美极品色图| 国产精品一线| 99精品99久久久久久宅男| 成人黄色毛片| 国产999精品| 日本三级一区| 国产69精品99久久久久久宅男| 国产传媒在线播放| 亚洲色图美腿丝袜| 午夜视频免费在线| 精品国精品自拍自在线| 99久久婷婷国产一区二区三区| 在线视频国内一区二区| av大全在线观看| 五月综合激情婷婷六月色窝| 一区二区国产精品精华液| 中文字幕不卡一区| a天堂中文字幕| 91麻豆国产精品久久| 欧美大喷水吹潮合集在线观看| 国产成人精品亚洲午夜麻豆| www.五月天色| 精品亚洲aⅴ乱码一区二区三区| 国产精品视频分类| 日本中文一区二区三区| 亚洲视频在线观看一区二区三区| 日韩影院精彩在线| 欧在线一二三四区| 日韩激情一区二区| 亚洲天堂网一区| 另类人妖一区二区av| 色免费在线视频| 免费成人性网站| 亚洲性图一区二区| 国产中文字幕一区| 亚洲丝袜在线观看| 风流少妇一区二区| 伦理片一区二区| 2020国产精品自拍| 91精品国自产在线| 国产精品全国免费观看高清| 糖心vlog免费在线观看| 依依成人精品视频| 国产大片中文字幕| 欧美日韩一区二区在线播放| 五月婷婷激情视频| 欧美视频一区二区三区四区| 91精品国产乱码久久久久| 日韩一级在线观看| 农村少妇久久久久久久| 日韩高清av一区二区三区| 日韩大胆人体| 少妇av一区二区三区| av片哪里在线观看| 68精品久久久久久欧美| 黄色精品视频| 亚洲一区二区日本| 成人影院中文字幕| 日韩色妇久久av| 91精品成人| 丝袜人妻一区二区三区| 老牛国产精品一区的观看方式 | 成人aaaa免费全部观看| 欧美图片一区二区| 国产精品久久久久久久久免费桃花 | 丰满少妇一级片| 国产手机视频精品| 男人天堂久久久| 久久免费国产精品1| 成人在线免费av| 国产精品成人一区二区三区| 欧美猛男同性videos| 亚洲第一综合网站| 午夜亚洲精品| 超碰在线资源站| 91麻豆.com| 国产人妻精品一区二区三区不卡| 精品免费在线视频| 99国产精品久久久久久久成人| 国产视频精品久久久| av黄在线观看| 国产精品久久久久久久久久久新郎 | 黄色网址在线免费观看| 亚洲91精品在线| 粉嫩av国产一区二区三区| 精品一区在线播放| 亚洲国产一区二区三区在线播放| 每日在线更新av| 国产盗摄女厕一区二区三区| 亚洲精品国产熟女久久久| 一区二区三区四区精品在线视频| 草莓视频18免费观看| 欧美成人video| 免费av网站在线看| 欧美亚洲国产日本| 亚洲国产欧美国产第一区| 日本在线播放不卡| 亚洲美女一区| 欧美一级大片免费看| 国产精品国产三级国产| 在线观看亚洲欧美| 欧美mv和日韩mv的网站| 日本高清视频在线播放| 欧美资源在线观看| 大香伊人久久精品一区二区| 乱子伦一区二区| 美女网站一区二区| 国产一区二区三区四区五区六区| 亚洲国产精品久久艾草纯爱| 国产激情久久久久久熟女老人av| 中文字幕日韩精品有码视频| 欧美精品日日操| 麻豆91蜜桃| 国产一区二区三区久久久久久久久| av天堂一区二区| 亚洲成人自拍网| 人人妻人人澡人人爽久久av| 欧美激情图片区| 日韩视频一区二区三区四区| 中文字幕成人一区| 久久99久久99| 懂色av粉嫩av蜜臀av一区二区三区| 91久久久免费一区二区| 视频一区二区三区国产| 91精品国产网站| 亚洲欧洲av| 国产精品动漫网站| 国产日产亚洲精品系列| 日韩黄色片网站| 一区二区中文字幕| 69堂免费精品视频在线播放| 色噜噜狠狠色综合网| 毛片av一区二区三区| 激情高潮到大叫狂喷水| 欧美日韩激情一区二区| av在线播放观看| 国产精品免费观看高清| 伊人精品视频| 熟女人妻在线视频| 色哟哟在线观看一区二区三区| 国产女人在线观看| 国产精品一区二区三区久久| 久久蜜桃av| 欧美69精品久久久久久不卡 | 中文字幕永久免费视频| 在线看国产精品| 成人免费91| 亚洲色成人www永久在线观看| av福利精品导航| 午夜精品一区二| 最近日韩中文字幕中文| 国产亚洲高清一区| 日韩亚洲欧美视频| 久久久五月婷婷| 国产一区二区小视频| 欧美精品久久久久a| 亚洲美女15p| 天堂在线一区二区三区| 亚洲国产成人91porn| 免费黄网站在线观看| 成人国产在线激情| 好看的日韩av电影| 人人妻人人藻人人爽欧美一区| 欧美日本一道本在线视频| 国产精品偷拍| 色综合666| 国产精品一区2区| 在线能看的av| 久久久精品美女| 女同另类激情重口| 91极品视频在线观看| 一区二区在线观看视频在线观看| 神宫寺奈绪一区二区三区| 国产精品69精品一区二区三区| 91成人网在线观看| 国产精品300页| 91麻豆精品91久久久久同性| 欧美aa在线| www.黄色网址.com| 久久久久久电影| 亚洲av色香蕉一区二区三区| 国产精品1234| 激情偷拍久久| 欧美色视频一区二区三区在线观看| 亚洲成人黄色网| 成人精品视频在线观看|