日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android获取相册中图片的路径 4.4版本前后的变化

發布時間:2025/3/21 Android 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android获取相册中图片的路径 4.4版本前后的变化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

兩個問題:
1. 通過調用系統Action,從圖庫中選擇圖片,并展示到界面上
2. API19前后獲取相冊圖片路徑
詳見(僅客戶端代碼),請移步:本人GITHUB

Intent intent = new Intent(); // Set an explicit MIME data type. intent.setType("image/*"); // Set the general action to be performed. intent.setAction(Intent.ACTION_GET_CONTENT); // callBack startActivityForResult(intent,1); @Override protected void onActivityResult(int requestCode,int resultCode, Intent data) {if (resultCode == RESULT_OK) {Uri uri = data.getData();ContentResolver cr =this.getContentResolver();try {Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri));/* 將Bitmap設定到ImageView */iv_local_pic.setImageBitmap(bitmap);int sdkVersion = Integer.valueOf(android.os.Build.VERSION.SDK);Log.d("sdkVersion:", String.valueOf(sdkVersion));Log.d("KITKAT:", String.valueOf(Build.VERSION_CODES.KITKAT));if (sdkVersion >= 19) { // 或者 android.os.Build.VERSION_CODES.KITKAT這個常量的值是19path = uri.getPath();//5.0直接返回的是圖片路徑 Uri.getPath is : /document/image:46 ,5.0以下是一個和數據庫有關的索引值System.out.println("path:" + path);// path_above19:/storage/emulated/0/girl.jpg 這里才是獲取的圖片的真實路徑path = getPath_above19(Upload_HttpUrlConnection_Activity.this, uri);System.out.println("path_above19:" + path);} else {path = getFilePath_below19(uri);}} catch (FileNotFoundException e) {Log.e("Exception", e.getMessage(), e);}}super.onActivityResult(requestCode, resultCode, data);} /*** API19以下獲取圖片路徑的方法* @param uri*/private String getFilePath_below19(Uri uri) {//這里開始的第二部分,獲取圖片的路徑:低版本的是沒問題的,但是sdk>19會獲取不到String[] proj = {MediaStore.Images.Media.DATA};//好像是android多媒體數據庫的封裝接口,具體的看Android文檔Cursor cursor = getContentResolver().query(uri, proj, null, null, null);//獲得用戶選擇的圖片的索引值int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);System.out.println("***************" + column_index);//將光標移至開頭 ,這個很重要,不小心很容易引起越界cursor.moveToFirst();//最后根據索引值獲取圖片路徑 結果類似:/mnt/sdcard/DCIM/Camera/IMG_20151124_013332.jpgString path = cursor.getString(column_index);System.out.println("path:" + path);return path;} /*** APIlevel 19以上才有* 創建項目時,我們設置了最低版本API Level,比如我的是10,* 因此,AS檢查我調用的API后,發現版本號不能向低版本兼容,* 比如我用的“DocumentsContract.isDocumentUri(context, uri)”是Level 19 以上才有的,* 自然超過了10,所以提示錯誤。* 添加 @TargetApi(Build.VERSION_CODES.KITKAT)即可。** @param context* @param uri* @return*/@TargetApi(Build.VERSION_CODES.KITKAT)public static String getPath_above19(final Context context, final Uri uri) {final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;// DocumentProviderif (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {// ExternalStorageProviderif (isExternalStorageDocument(uri)) {final String docId = DocumentsContract.getDocumentId(uri);final String[] split = docId.split(":");final String type = split[0];if ("primary".equalsIgnoreCase(type)) {return Environment.getExternalStorageDirectory() + "/" + split[1];}// TODO handle non-primary volumes}// DownloadsProviderelse if (isDownloadsDocument(uri)) {final String id = DocumentsContract.getDocumentId(uri);final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));return getDataColumn(context, contentUri, null, null);}// MediaProviderelse if (isMediaDocument(uri)) {final String docId = DocumentsContract.getDocumentId(uri);final String[] split = docId.split(":");final 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;}final String selection = "_id=?";final String[] selectionArgs = new String[]{split[1]};return getDataColumn(context, contentUri, selection, selectionArgs);}}// MediaStore (and general)else if ("content".equalsIgnoreCase(uri.getScheme())) {// Return the remote addressif (isGooglePhotosUri(uri))return uri.getLastPathSegment();return getDataColumn(context, uri, null, null);}// Fileelse if ("file".equalsIgnoreCase(uri.getScheme())) {return uri.getPath();}return null;}/*** Get the value of the data column for this Uri. This is useful for* MediaStore Uris, and other file-based ContentProviders.** @param context The context.* @param uri The Uri to query.* @param selection (Optional) Filter used in the query.* @param selectionArgs (Optional) Selection arguments used in the query.* @return The value of the _data column, which is typically a file path.*/public static String getDataColumn(Context context, Uri uri, String selection,String[] selectionArgs) {Cursor cursor = null;final String column = "_data";final String[] projection = {column};try {cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,null);if (cursor != null && cursor.moveToFirst()) {final 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.*/public 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.*/public 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.*/public 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());}

總結

以上是生活随笔為你收集整理的Android获取相册中图片的路径 4.4版本前后的变化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品国产18久久久久久 | 精品一区二区三区电影 | 国产又粗又猛视频 | 成人黄色片免费看 | 男女天堂av | 亚洲一区二区三区在线看 | 香蕉国产在线观看 | 欧美韩国一区 | 久久免费黄色网址 | 亚洲素人| 中文字幕第31页 | 国产51精品 | 性欧美18—19sex性高清 | 黄瓜视频在线观看 | 夜夜爽av福利精品导航 | 欧美国产精品一区二区三区 | 日产国产亚洲精品系列 | 久操av| 裸体的日本在线观看 | 毛片在哪看 | 天天干夜夜爽 | 久久波多野 | 国模私拍在线观看 | 波多在线观看 | 青草精品在线 | 激情文学久久 | 在线看你懂 | 国产黄色一区二区 | 成人亚洲国产 | 久久人人草| 人妻无码中文字幕免费视频蜜桃 | 中国女人真人一级毛片 | 色一情一乱一伦一区二区三区 | 超碰美女在线 | 91丨九色丨黑人外教 | 狠狠2020 | 国产高清精品软件丝瓜软件 | 欧美乱大交 | 一道本在线播放 | 色超碰| 国产高清不卡一区 | 亚洲妇熟xx妇色黄蜜桃 | 中文字幕人妻熟女人妻a片 麻豆91视频 | 桃色视频网站 | 在线观看麻豆av | 亚洲精品一区二区三区影院忠贞 | 日本变态折磨凌虐bdsm在线 | 长篇高h肉爽文丝袜 | 亚洲中文字幕视频一区 | 日日舔夜夜操 | 男女啪啪免费网站 | japanesehdxxxx| 青青草华人在线 | 自拍天堂 | 久久91亚洲人成电影网站 | 91超碰免费在线 | 亚洲成人av电影 | 91福利一区| 思思久久久 | 国产精品久久久久av | 尤物在线观看视频 | 青青草色视频 | 久久99久久99精品免观看软件 | 久久久精品一区二区涩爱 | 国产精品野外户外 | 亚洲经典在线观看 | 亚洲天堂av电影 | 九九午夜视频 | 天天爽夜夜爽夜夜爽精品 | 超碰人人国产 | 日韩欧美一区视频 | 日本精品视频在线观看 | 一级片在线观看免费 | 91亚洲一区二区三区 | 黄色录像一级大片 | 精品视频免费在线 | 瑟瑟视频网站 | 在线观看成年人网站 | 国产一区二区三区视频在线观看 | 亚洲五码在线 | 欧美日韩国产成人 | 亚洲成人久久久 | 国产尤物在线视频 | 久婷婷| 日韩欧美一二三 | 韩日免费av | 99精品热视频 | 久久福利网站 | 国产簧片| 尹人成人网 | 日韩激情久久 | 国产日韩一区二区三区 | 中文字幕在线视频一区二区 | 天天摸天天干天天操 | 欧美性免费 | 人妖干美女| 91视频合集| 亚洲性色视频 | 神马久久精品 |