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

首頁 > 系統 > Android > 正文

MVP模式的Android 調用系統拍照,相冊,剪裁,適配到7.0,修復拍照圖片旋轉問題

2019-11-06 09:43:54
字體:
來源:轉載
供稿:網友

Android 調用系統拍照,相冊,剪裁,適配到7.0,修復拍照圖片旋轉問題

直接上代碼

首先添加拍照需要的權限

<uses-permission android:name="android.permission.CAMERA" />//相機權限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />//寫SD<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />//讀SD<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTE" />

使用的常量

public static final int MY_PERMISSIONS_REQUEST_CAMERA = 100;//拍照權限public static final int MY_PERMISSIONS_REQUEST_READ_SD= 101;//讀SD卡權限public static final int MY_PERMISSIONS_REQUEST_WRITE_SK = 102;//寫SD卡權限public static final int MY_PERMISSIONS_REQUEST_READ_SD_PHOTOALBUM= 103;//寫SD卡權限public static final int MY_PERMISSIONS_REQUEST_WRITE_SK_PHOTOALBUM = 104;//寫SD卡權限public static final int CAPTURE_IMAGE_REQUEST = 104;//拍照后的返回值public static final int LOAD_IMAGE_REQUEST = 105;//相冊的返回值public static final int CLip_IMAGE_REQUEST = 106;//剪裁圖片的返回值public static final String IMAGE_TYPE = "image/*";public static File mOutFile;//圖片uri路徑public static File mImageFile=null;//圖片file路徑public static Integer mBuildVersion=android.os.Build.VERSION.SDK_INT;//當前SDK版本

定義需要用到的接口

public interface UserCenterModel { /** * 拍照 * @param context */ void getFileByPhotograph(Context context); /** * 相冊 * @param context */ void getFileByPhotoAlbum(Context context); /** * 創建img文件 * @return */ File getImagefile(); /** * 開始拍照 * @param context */ void startPhotograph(Context context); /** * 調用相冊 * @param context */ void startPhotoAlbum(Context context); /** * 剪裁圖片 * @param activity */ void startClip(Activity activity, File file); /** * API24 以上調用 * @param context * @param imageFile * @return */ Uri getImageContentUri(Context context, File imageFile);}

接口實現類

public class UserCenterRealize implements UserCenterModel { @Override public void getFileByPhotograph(Context context) { Activity activity = (Activity) context; if (AppConsts.mBuildVersion >= 23) { if (ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { //申請相機權限 ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.CAMERA}, AppConsts.MY_PERMISSIONS_REQUEST_CAMERA); } else { if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { //申請讀SD權限 ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, AppConsts.MY_PERMISSIONS_REQUEST_READ_SD); } else { if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { //申請寫SD權限 ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, AppConsts.MY_PERMISSIONS_REQUEST_WRITE_SK); } else { startPhotograph(activity); } } } } else { //拍照 startPhotograph(activity); } } @Override public File getImagefile() { File mediaStorageDir = null; File mediaFile = null; try { mediaStorageDir = new File(Environment.getExternalStorageDirectory().toString() + "/IMAGE/"); Log.d("創建文件夾成功", mediaStorageDir.toString()); } catch (Exception e) { e.PRintStackTrace(); Log.d("創建文件夾失敗", mediaStorageDir.toString()); } if (!mediaStorageDir.exists()) { if (!mediaStorageDir.mkdirs()) { Log.d("創建文件失敗", "WRITE_EXTERNAL_STORAGE 權限"); return null; } } // Create a media file name String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); mediaFile = new File(mediaStorageDir.getPath() + File.separator + "IMG_" + timeStamp + ".jpg"); Log.d("創建文件成功",mediaFile.toString()); return mediaFile; } @Override public void getFileByPhotoAlbum(Context context) { Activity activity= (Activity) context; if (AppConsts.mBuildVersion >= 23) { if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { //申請讀SD權限 ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, AppConsts.MY_PERMISSIONS_REQUEST_READ_SD_PHOTOALBUM); } else { if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { //申請寫SD權限 ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, AppConsts.MY_PERMISSIONS_REQUEST_WRITE_SK_PHOTOALBUM); } else { startPhotoAlbum(context); } } } else { startPhotoAlbum(context); } } @Override public void startPhotoAlbum(Context context) { if(!BitmapUtils.existSDCard()){ Toast.makeText(context, "未檢測到SD卡", Toast.LENGTH_SHORT).show(); return; } Activity a= (Activity) context; Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT); getAlbum.setType(AppConsts.IMAGE_TYPE); a.startActivityForResult(getAlbum, AppConsts.LOAD_IMAGE_REQUEST); } @Override public void startPhotograph(Context context) { if(!BitmapUtils.existSDCard()){ Toast.makeText(context, "未檢測到SD卡", Toast.LENGTH_SHORT).show(); return; } Activity activity= (Activity) context; if (AppConsts.mBuildVersion<24){ Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); mImageFile=getImagefile(); intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(mImageFile)); activity.startActivityForResult(intent, AppConsts.CAPTURE_IMAGE_REQUEST); }else { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); ContentValues contentValues = new ContentValues(1); mImageFile=getImagefile(); contentValues.put(MediaStore.Images.Media.DATA, mImageFile.getAbsolutePath()); Uri uri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,contentValues); intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); activity.startActivityForResult(intent, AppConsts.CAPTURE_IMAGE_REQUEST); } } @Override public void startClip(Activity activity, File file) { if(null == file){ return; } mOutFile=getImagefile(); Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(getImageContentUri(activity,file),AppConsts.IMAGE_TYPE); intent.putExtra("crop", "true"); intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra("outputX", 180); intent.putExtra("outputY", 180); intent.putExtra("scale", true); intent.putExtra("return-data", false); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mOutFile)); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); intent.putExtra("noFaceDetection", true); activity.startActivityForResult(intent, AppConsts.CLIP_IMAGE_REQUEST); } @Override public Uri getImageContentUri(Context context, File imageFile) { String filePath = imageFile.getAbsolutePath(); Uri uri=null; Cursor cursor = context.getContentResolver().query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[] { MediaStore.Images.Media._ID }, MediaStore.Images.Media.DATA + "=? ", new String[] { filePath }, null); if (cursor != null && cursor.moveToFirst()) { int id = cursor.getInt(cursor .getColumnIndex(MediaStore.MediaColumns._ID)); Uri baseUri = Uri.parse("content://media/external/images/media"); uri= Uri.withAppendedPath(baseUri, "" + id); } else { if (imageFile.exists()) { ContentValues values = new ContentValues(); values.put(MediaStore.Images.Media.DATA, filePath); uri= context.getContentResolver().insert( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); } else { uri= null; } } return uri; }}

Actvity界面中的回調

userCenterRealize.getFileByPhotoAlbum(this);//拍照外部調用 userCenterRealize.getFileByPhotograph(this);//相冊外部調用@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == AppConsts.MY_PERMISSIONS_REQUEST_CAMERA) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { userCenterRealize.getFileByPhotograph(this); } else { Toast.makeText(this, "請授予相機權限", Toast.LENGTH_SHORT).show(); } }else if(requestCode == AppConsts.MY_PERMISSIONS_REQUEST_READ_SD){ if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { userCenterRealize.getFileByPhotograph(this); } else { Toast.makeText(this, "請授予讀SD卡權限", Toast.LENGTH_SHORT).show(); } }else if(requestCode == AppConsts.MY_PERMISSIONS_REQUEST_WRITE_SK){ if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { userCenterRealize.getFileByPhotograph(this); } else { Toast.makeText(this, "請授予寫SD卡權限", Toast.LENGTH_SHORT).show(); } }else if(requestCode == AppConsts.MY_PERMISSIONS_REQUEST_READ_SD_PHOTOALBUM) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { userCenterRealize.startPhotoAlbum(this); } else { Toast.makeText(this, "請授予讀SD卡權限", Toast.LENGTH_SHORT).show(); } }else if(requestCode == AppConsts.MY_PERMISSIONS_REQUEST_WRITE_SK_PHOTOALBUM) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { userCenterRealize.startPhotoAlbum(this); } else { Toast.makeText(this, "請授予寫SD卡權限", Toast.LENGTH_SHORT).show(); } } }@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // 拍照 if (AppConsts.CAPTURE_IMAGE_REQUEST == requestCode) { if (RESULT_OK == resultCode) { Log.d("拍照得到圖片", AppConsts.mImageFile.toString()); int mDegree=BitmapUtils.getBitmapDegree(AppConsts.mImageFile.getAbsolutePath()); Log.d("拍照得到圖片的角度:", String.valueOf(mDegree)); if(mDegree==90||mDegree==180||mDegree==270){ try { Bitmap mBitmap= BitmapUtils.getFileBitmap(AppConsts.mImageFile); Bitmap bitmap=BitmapUtils.rotateBitmapByDegree(mBitmap,mDegree); if(BitmapUtils.saveBitmapFile(bitmap,AppConsts.mImageFile)){ userCenterRealize.startClip(this, AppConsts.mImageFile); }else { Toast.makeText(this, "保存圖片失敗", Toast.LENGTH_SHORT).show(); } } catch (Exception e) { e.printStackTrace(); Toast.makeText(this, "讀取圖片失敗", Toast.LENGTH_SHORT).show(); } }else { userCenterRealize.startClip(this, AppConsts.mImageFile); } } //相冊 } else if (AppConsts.LOAD_IMAGE_REQUEST == requestCode) { if (data != null) { Uri uri = data.getData(); String filepath=FileUtils.getImageAbsolutePath(this, uri); Log.d("相冊獲取到的文件路徑",filepath); File file = new File(filepath); userCenterRealize.startClip(this, file); } //剪裁 } else if (AppConsts.CLIP_IMAGE_REQUEST == requestCode) { Log.d("剪裁得到圖片", AppConsts.mOutFile.toString()); Bitmap bitmap = BitmapUtils.getFileBitmap(AppConsts.mOutFile); imgAvatar.setImageBitmap(bitmap); BitmapUtils.deleteFile(AppConsts.mImageFile); } }

工程中使用到的工具類

public class BitmapUtils { /** * 獲取網絡圖片資源 * @param url * @return */ public static Bitmap getHttpBitmap(String url){ URL myFileURL; Bitmap bitmap=null; try{ myFileURL = new URL(url); //獲得連接 HttpURLConnection conn=(HttpURLConnection)myFileURL.openConnection(); //設置超時時間為6000毫秒,conn.setConnectionTiem(0);表示沒有時間限制 conn.setConnectTimeout(6000); //連接設置獲得數據流 conn.setDoInput(true); //不使用緩存 conn.setUseCaches(false); //這句可有可無,沒有影響 //conn.connect(); //得到數據流 InputStream is = conn.getInputStream(); //解析得到圖片 bitmap = BitmapFactory.decodeStream(is); //關閉數據流 is.close(); }catch(Exception e){ e.printStackTrace(); } return bitmap; } /** * 判斷是否有SD卡 * @return */ public static boolean existSDCard() { if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)){ return true; }else { return false; } } /** * 從文件中讀取圖片 * @param file * @return */ public static Bitmap getFileBitmap(File file) { FileInputStream fis = null; Bitmap bitmap=null; try { //把圖片轉化為字節流 fis = new FileInputStream(file); //把流轉化圖片 bitmap = BitmapFactory.decodeStream(fis); } catch (FileNotFoundException e) { e.printStackTrace(); } finally { try { fis.close();//關閉流 } catch (IOException e) { e.printStackTrace(); } } return bitmap; } /** * 讀取圖片的旋轉的角度 * * @param path * 圖片絕對路徑 * @return 圖片的旋轉角度 */ public static int getBitmapDegree(String path) { int degree = 0; try { // 從指定路徑下讀取圖片,并獲取其EXIF信息 ExifInterface exifInterface = new ExifInterface(path); // 獲取圖片的旋轉信息 int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); switch (orientation) { case ExifInterface.ORIENTATION_ROTATE_90: degree = 90; break; case ExifInterface.ORIENTATION_ROTATE_180: degree = 180; break; case ExifInterface.ORIENTATION_ROTATE_270: degree = 270; break; } } catch (IOException e) { e.printStackTrace(); } return degree; } /** * 將圖片按照某個角度進行旋轉 * * @param bm * 需要旋轉的圖片 * @param degree * 旋轉角度 * @return 旋轉后的圖片 */ public static Bitmap rotateBitmapByDegree(Bitmap bm, int degree) { Bitmap returnBm = null; // 根據旋轉角度,生成旋轉矩陣 Matrix matrix = new Matrix(); matrix.postRotate(degree); try { // 將原始圖片按照旋轉矩陣進行旋轉,并得到新的圖片 returnBm = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), matrix, true); } catch (OutOfMemoryError e) { } if (returnBm == null) { returnBm = bm; } if (bm != returnBm) { bm.recycle(); } return returnBm; } /** * 刪除文檔 * @param file */ public static boolean deleteFile(File file) { try { if(file!=null) { if(FileUtils.deleteFile(file.getAbsolutePath())){ AppConsts.mImageFile=null; Log.d("刪除文件","true"); return true; }else { return false; } }else { Log.d("刪除文件路徑為空","false"); return false; } } catch (Exception e) { e.printStackTrace(); Log.d("刪除文件","false"); return false; } } /** * 保存圖片 * @param bitmap * @param file */ public static boolean saveBitmapFile(Bitmap bitmap, File file){ try { BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file)); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos); bos.flush(); bos.close(); return true; } catch (IOException e) { e.printStackTrace(); return false; } }public class FileUtils { /** * 刪除單個文件 * @param filePath 被刪除文件的文件名 * @return 文件刪除成功返回true,否則返回false */ public static boolean deleteFile(String filePath) { File file = new File(filePath); if (file.isFile() && file.exists()) { return file.delete(); } return false; } /** * 根據Uri獲取圖片絕對路徑,解決Android4.4以上版本Uri轉換 * @param context * @param imageUri * @author yaoxing * @date 2014-10-12 */ @TargetApi(19) public static String getImageAbsolutePath(Activity context, Uri imageUri) { if (context == null || imageUri == null) return null; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT && DocumentsContract.isDocumentUri(context, imageUri)) { if (isExternalStorageDocument(imageUri)) { String docId = DocumentsContract.getDocumentId(imageUri); String[] split = docId.split(":"); String type = split[0]; if ("primary".equalsIgnoreCase(type)) { return Environment.getExternalStorageDirectory() + "/" + split[1]; } } else if (isDownloadsDocument(imageUri)) { String id = DocumentsContract.getDocumentId(imageUri); Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id)); return getDataColumn(context, contentUri, null, null); } else if (isMediaDocument(imageUri)) { String docId = DocumentsContract.getDocumentId(imageUri); String[] split = docId.split(":"); String type = split[0]; Uri contentUri = null; if ("image".equals(type)) { contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; } else if ("video".equals(type)) { contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; } else if ("audio".equals(type)) { contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; } String selection = MediaStore.Images.Media._ID + "=?"; String[] selectionArgs = new String[] { split[1] }; return getDataColumn(context, contentUri, selection, selectionArgs); } } // MediaStore (and general) else if ("content".equalsIgnoreCase(imageUri.getScheme())) { // Return the remote address if (isGooglePhotosUri(imageUri)) return imageUri.getLastPathSegment(); return getDataColumn(context, imageUri, null, null); } // File else if ("file".equalsIgnoreCase(imageUri.getScheme())) { return imageUri.getPath(); } return null; } private static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) { Cursor cursor = null; String column = MediaStore.Images.Media.DATA; String[] projection = { column }; try { cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null); if (cursor != null && cursor.moveToFirst()) { int index = cursor.getColumnIndexOrThrow(column); return cursor.getString(index); } } finally { if (cursor != null) cursor.close(); } return null; } /** * @param uri The Uri to check. * @return Whether the Uri authority is ExternalStorageProvider. */ private static boolean isExternalStorageDocument(Uri uri) { return "com.android.externalstorage.documents".equals(uri.getAuthority()); } /** * @param uri The Uri to check. * @return Whether the Uri authority is DownloadsProvider. */ private static boolean isDownloadsDocument(Uri uri) { return "com.android.providers.downloads.documents".equals(uri.getAuthority()); } /** * @param uri The Uri to check. * @return Whether the Uri authority is MediaProvider. */ private static boolean isMediaDocument(Uri uri) { return "com.android.providers.media.documents".equals(uri.getAuthority()); } /** * @param uri The Uri to check. * @return Whether the Uri authority is Google Photos. */ public static boolean isGooglePhotosUri(Uri uri) { return "com.google.android.apps.photos.content".equals(uri.getAuthority()); }}

The End

QQ:3355168235(遇到問題或者有更好的建議請聯系我額)
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久视频国产精品免费视频在线| 国产精品欧美日韩久久| 欧美视频精品一区| 国产成人综合一区二区三区| 日韩小视频网址| 91黑丝在线观看| 日本午夜精品理论片a级appf发布| 国产日产欧美精品| 亚洲精品suv精品一区二区| 亚洲一区二区自拍| 亚洲大胆人体av| 精品国产乱码久久久久久虫虫漫画| 国产精品第七十二页| 亚洲在线观看视频| 欧美激情视频一区二区三区不卡| 欧美极品美女视频网站在线观看免费| 欧美一区二区.| 久久久久久成人精品| 欧美一级bbbbb性bbbb喷潮片| 日韩大胆人体377p| 91久久久久久| 欧美裸体xxxx极品少妇| 丝袜美腿亚洲一区二区| 日韩精品免费在线| 国产精品欧美久久久| 伊人青青综合网站| 亚洲香蕉成视频在线观看| 久久久久久久久久久91| 精品成人av一区| 欧美老女人www| 欧美日韩国产一区中文午夜| 97**国产露脸精品国产| 91精品视频免费看| 精品亚洲一区二区三区四区五区| 国产精品丝袜久久久久久高清| 日韩小视频在线| 日本高清视频精品| 久久这里只有精品视频首页| 日韩欧美综合在线视频| 国产精品久久久久久久久影视| 久久久久久91| 亚洲精品电影久久久| 色久欧美在线视频观看| 91精品国产九九九久久久亚洲| 欧美大片大片在线播放| 国产成人精品综合久久久| 免费97视频在线精品国自产拍| 18性欧美xxxⅹ性满足| 国产成人精品视频在线观看| 欧美影院在线播放| 两个人的视频www国产精品| 国产精品美女久久| 一区二区三区国产在线观看| 久久黄色av网站| 国产精品视频不卡| 亚洲人精选亚洲人成在线| 欧美综合在线观看| 久久精品青青大伊人av| 在线日韩av观看| 欧美高清视频在线观看| 97精品国产97久久久久久免费| 欧美寡妇偷汉性猛交| 亚洲欧美精品一区| 午夜精品一区二区三区在线播放| 精品中文字幕在线2019| 成人a在线观看| 欧美精品制服第一页| 亚洲乱码av中文一区二区| 高清欧美一区二区三区| 国产欧美婷婷中文| 国产精品高清在线| 欧美成人国产va精品日本一级| 国产精品久久久999| 欧美理论电影在线播放| 欧美成人午夜免费视在线看片| 欧美在线亚洲一区| 91地址最新发布| 久久在线精品视频| 亚洲天堂av在线免费| 一区二区中文字幕| xvideos成人免费中文版| 欧美日韩爱爱视频| 国语自产精品视频在线看| 久久免费高清视频| 欧美午夜视频一区二区| 亚洲xxxx3d| 成人国产精品色哟哟| 亚洲综合自拍一区| 欧美与黑人午夜性猛交久久久| 久久久久久久久久久免费精品| 欧美寡妇偷汉性猛交| 国产精品老牛影院在线观看| 精品亚洲永久免费精品| 欧美性高潮床叫视频| 有码中文亚洲精品| 日韩精品免费一线在线观看| 国产精品亚洲第一区| 国产精品1区2区在线观看| 国产精品久久久久久网站| 国产日韩在线亚洲字幕中文| 日韩欧美亚洲范冰冰与中字| 国产美女主播一区| 精品高清美女精品国产区| 91影视免费在线观看| 欧美激情女人20p| 欧美大尺度激情区在线播放| 日韩欧美国产高清91| 欧美日韩免费在线| 久久久女女女女999久久| 中文一区二区视频| 91a在线视频| 91精品久久久久久久| 亚洲精品一区二区三区不| 久久久久久久网站| 成人国产亚洲精品a区天堂华泰| 狠狠色噜噜狠狠狠狠97| 美女扒开尿口让男人操亚洲视频网站| 爽爽爽爽爽爽爽成人免费观看| 中文字幕一区电影| 亚洲日本aⅴ片在线观看香蕉| 亚洲欧美日韩中文视频| 永久免费看mv网站入口亚洲| 国产成+人+综合+亚洲欧洲| 亚洲有声小说3d| 国产成人鲁鲁免费视频a| 亚洲欧美精品一区二区| 亚洲欧美一区二区激情| 性欧美xxxx视频在线观看| 亚洲午夜精品久久久久久性色| 国产精品av在线| 亚洲精品资源美女情侣酒店| 中文字幕日韩欧美在线| 国产精品久久婷婷六月丁香| 久久综合九色九九| 日韩中文有码在线视频| 国产精品精品久久久久久| 亚洲在线www| 日韩综合视频在线观看| 国产69精品久久久久久| 日韩精品中文字幕久久臀| 不卡av在线播放| 亚洲欧美日韩一区二区三区在线| 久久精品国产亚洲7777| 精品久久久国产精品999| 亚洲精品有码在线| 欧美最猛黑人xxxx黑人猛叫黄| 国产在线观看精品一区二区三区| 午夜精品久久17c| 亚洲欧美日韩视频一区| 国产精品自拍小视频| 91a在线视频| 亚洲福利在线看| 国产偷国产偷亚洲清高网站| 欧美成人剧情片在线观看| 奇米成人av国产一区二区三区| 国产亚洲欧美一区| 国产一区二区三区四区福利| 欧美亚洲另类在线| 日本久久久久久久久| 久久精品欧美视频| 亚洲福利在线观看| 久久欧美在线电影| 国产精品手机播放| 欧美成人精品在线视频|