1. 程式人生 > >Android通過uri獲取資源路徑問題

Android通過uri獲取資源路徑問題

  1. /** 
  2.  * Get a file path from a Uri. This will get the the path for Storage Access 
  3.  * Framework Documents, as well as the _data field for the MediaStore and 
  4.  * other file-based ContentProviders. 
  5.  * 
  6.  * @param context The context. 
  7.  * @param uri The Uri to query. 
  8.  * @author paulburke 
  9.  */
  10. publicstatic String getPath(
    final Context context, final Uri uri) {  
  11.     finalboolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;  
  12.     // DocumentProvider
  13.     if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {  
  14.         // ExternalStorageProvider
  15.         if (isExternalStorageDocument(uri)) {  
  16.             final String docId = DocumentsContract.getDocumentId(uri);  
  17.             final String[] split = docId.split(":");  
  18.             final String type = split[0];  
  19.             if ("primary".equalsIgnoreCase(type)) {  
  20.                 return Environment.getExternalStorageDirectory() + "/" + split[1
    ];  
  21.             }  
  22.             // TODO handle non-primary volumes
  23.         }  
  24.         // DownloadsProvider
  25.         elseif (isDownloadsDocument(uri)) {  
  26.             final String id = DocumentsContract.getDocumentId(uri);  
  27.             final Uri contentUri = ContentUris.withAppendedId(  
  28.                     Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));  
  29.             return getDataColumn(context, contentUri, nullnull);  
  30.         }  
  31.         // MediaProvider
  32.         elseif (isMediaDocument(uri)) {  
  33.             final String docId = DocumentsContract.getDocumentId(uri);  
  34.             final String[] split = docId.split(":");  
  35.             final String type = split[0];  
  36.             Uri contentUri = null;  
  37.             if ("image".equals(type)) {  
  38.                 contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;  
  39.             } elseif ("video".equals(type)) {  
  40.                 contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;  
  41.             } elseif ("audio".equals(type)) {  
  42.                 contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;  
  43.             }  
  44.             final String selection = "_id=?";  
  45.             final String[] selectionArgs = new String[] {  
  46.                     split[1]  
  47.             };  
  48.             return getDataColumn(context, contentUri, selection, selectionArgs);  
  49.         }  
  50.     }  
  51.     // MediaStore (and general)
  52.     elseif ("content".equalsIgnoreCase(uri.getScheme())) {  
  53.         return getDataColumn(context, uri, nullnull);  
  54.     }  
  55.     // File
  56.     elseif ("file".equalsIgnoreCase(uri.getScheme())) {  
  57.         return uri.getPath();  
  58.     }  
  59.     returnnull;  
  60. }  
  61. /** 
  62.  * Get the value of the data column for this Uri. This is useful for 
  63.  * MediaStore Uris, and other file-based ContentProviders. 
  64.  * 
  65.  * @param context The context. 
  66.  * @param uri The Uri to query. 
  67.  * @param selection (Optional) Filter used in the query. 
  68.  * @param selectionArgs (Optional) Selection arguments used in the query. 
  69.  * @return The value of the _data column, which is typically a file path. 
  70.  */
  71. publicstatic String getDataColumn(Context context, Uri uri, String selection,  
  72.         String[] selectionArgs) {  
  73.     Cursor cursor = null;  
  74.     final String column = "_data";  
  75.     final String[] projection = {  
  76.             column  
  77.     };  
  78.     try {  
  79.         cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,  
  80.                 null);  
  81.         if (cursor != null && cursor.moveToFirst()) {  
  82.             finalint column_index = cursor.getColumnIndexOrThrow(column);  
  83.             return cursor.getString(column_index);  
  84.         }  
  85.     } finally {  
  86.         if (cursor != null)  
  87.             cursor.close();  
  88.     }  
  89.     returnnull;  
  90. }  
  91. /** 
  92.  * @param uri The Uri to check. 
  93.  * @return Whether the Uri authority is ExternalStorageProvider. 
  94.  */
  95. publicstaticboolean isExternalStorageDocument(Uri uri) {  
  96.     return"com.android.externalstorage.documents".equals(uri.getAuthority());  
  97. }  
  98. /** 
  99.  * @param uri The Uri to check. 
  100.  * @return Whether the Uri authority is DownloadsProvider. 
  101.  */
  102. publicstaticboolean isDownloadsDocument(Uri uri) {  
  103.     return"com.android.providers.downloads.documents".equals(uri.getAuthority());  
  104. }  
  105. /** 
  106.  * @param uri The Uri to check. 
  107.  * @return Whether the Uri authority is MediaProvider. 
  108.  */
  109. publicstaticboolean isMediaDocument(Uri uri) {  
  110.     

    相關推薦

    Android通過uri獲取資源路徑問題

    /**  * Get a file path from a Uri. This will get the the path for Storage Access  * Framework Documents, as well as the _data field for th

    android 通過uri獲取bitmap圖片並壓縮

    很多人在呼叫相簿選擇圖片時會在onActivityResult中用Media.getBitmap來獲取返回的圖片,如下: Uri mImageCaptureUri = data.getData(); Bitmap photoBmp = null; if (mImageCap

    android 通過uri獲取圖片並根據限制大小讀取圖片的方法

    uri = data.getData();BitmapFactory.Options options =newBitmapFactory.Options(); options.inJustDecodeBounds =true;try{Bitm

    android選擇圖片,通過uri獲取路徑

    roi con sch project else mov providers tex exc /** * 根據Uri獲取圖片的絕對路徑 * * @param context 上下文對象 * @param uri 圖片

    Android通過反射獲取資源Id

    package com.cp.utils; import android.content.Context; public class CPResourceUtil { public static int getLayoutId(Context paramContext, String par

    Android 小筆記 Uri獲取絕對路徑路徑轉Bitmap、獲取螢幕截圖

    1. Uri獲取絕對路徑 public static String getRealPathFromURI(Context mContext, Uri contentUri) { St

    Android 通過手機資料夾路徑,得到 某張 照片 的 詳細/詳情/資訊的獲取

    Main import android.annotation.SuppressLint; import android.app.Activity; import android.content.pm.ActivityInfo; import android.databas

    Android Uri獲取真實路徑以及檔名的方法

    在Android 程式設計中經常會用到uri轉化為檔案路徑 下面是4.4後通過Uri獲取路徑以及檔名一種方法 public static String getRealFilePath( fin

    weblogic上獲取資源路徑

    路徑 context gpo 方法 etc tcl thread ren class weblogic和tomcat下通用的獲取路徑或者加載資源的方法 1、獲取路徑 this.getClass().getClassLoader().getResource("/").getP

    Java class.getClassLoader().getResource("")獲取資源路徑

    Java web專案打包部署時發現出現平時開發過程中沒有出現的錯誤,檢視日誌發現是因為程式碼中 獲取配置檔案路徑有誤。 一、錯誤分析 專案中程式碼: webRootPath = MySqlDbPoolConnection.class.getClassLoader().getRe

    android 通過地址獲取經緯度

    這是通過google原生介面獲取的經緯度 public static Address getGeoPointBystr(Context context,String str) { Addres

    Android 通過網路獲取圖片的原始碼

    將開發過程中經常用到的內容做個備份,如下的資料是關於Android 通過網路獲取圖片的的內容。 package com.netimg; import android.app.Activity;import android.graphics.Bitmap;import android.graphics.Bi

    Android 通過Handler獲取當前時間

    一言不合就上程式碼  public class HandlerDemoActivity extends AppCompatActivity { private Button getTime; private TextView setTime; @Overri

    34-java-獲取資源路徑

    01.獲取路徑 02.獲取資源流 03.獲取路徑下所有資源的路徑 @Override public void doGet(HttpServletRequest req, HttpS

    NSBundle(獲取資源路徑方法)的相關使用方法和注意事項

    1、[NSBundle mainBundle],資料夾其實是Group,如左側的樹形檔案管理器 Build之後,檔案直接就複製到了根目錄下,於是讀取的方法,應該是這樣: NSString *earth = [[NSBundle mainBundle] pat

    NSBundle 獲取資源路徑

     之前在初始化一個類的時候:TestViewController *viewcontroller=[[TestViewController alloc]initWithNibName:@"TestViewController" bundle:[NSBundle mainB

    javaWeb專案中的路徑格式 請求url地址 客戶端路徑 服務端路徑 url-pattern 路徑 獲取資源路徑 地址 url

    javaweb專案中有很多場景的路徑客戶端的POST/GET請求,伺服器的請求轉發,資源獲取需要設定路徑等這些路徑表達的含義都有不同,所以想要更好的書寫規範有用的路徑程式碼 需要對路徑有一個清晰地認知 路徑基本上分三類 客戶端路徑 服務端路徑

    Android——通過GPS獲取使用者地理位置並監聽位置變化

    這個功能挺簡單的,最近用到了就總結下: 1、開啟地理位置監聽: /* * 開啟地理位置監聽 */ public void registerGpsListener(Context context) { Log

    Android通過findViewById()獲取控制元件為NULL

    如果在activity中直接呼叫findViewById方法,它的完整形式是this.findViewById().而我所需要的控制元件是不存在本身activity的佈局中的.所以要通過控制元件所在的view呼叫findViewById方法,就可以獲取到正確的控制元件了

    Java獲取資源路徑下的檔案、模板

    工作時有個需求是需要傳送html格式的郵件,這裡我們不討論發郵件的事,而是講一講如何從java專案的資源路徑下獲取自定義的資原始檔或者模板。我這裡是需要獲取html檔案的內容,並替換其中的資訊,傳送html格式的郵件。 HTML檔案內容如下: <!DOCTYPE html&