wkcole 2014-12-04 14:49 采纳率: 0%
浏览 1809

安卓新手有个关于uri格式的疑问

如题,在安卓学习中发现uri有两种格式:file:///和content:///有什么区别?
求大神们赐教!

  • 写回答

2条回答 默认 最新

  • Rocloud 2014-12-04 23:08
    关注

    文件File path与content:// Uri的相互转换

    content Uri to path

    [java] view plaincopy

        /** 
         * Gets the corresponding path to a file from the given content:// URI 
         * @param selectedVideoUri The content:// URI to find the file path from 
         * @param contentResolver The content resolver to use to perform the query. 
         * @return the file path as a string 
         */  
        public static String getFilePathFromContentUri(Uri selectedVideoUri,  
                ContentResolver contentResolver) {  
            String filePath;  
            String[] filePathColumn = {MediaColumns.DATA};  
    
            Cursor cursor = contentResolver.query(selectedVideoUri, filePathColumn, null, null, null);  
    //      也可用下面的方法拿到cursor  
    //      Cursor cursor = this.context.managedQuery(selectedVideoUri, filePathColumn, null, null, null);  
    
            cursor.moveToFirst();  
    
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);  
            filePath = cursor.getString(columnIndex);  
            cursor.close();  
            return filePath;  
        }  
    

    path to content Uri

    [java] view plaincopy

    /** 
     * Gets the content:// URI  from the given corresponding path to a file 
     * @param context 
     * @param imageFile 
     * @return content Uri 
     */  
    public static Uri getImageContentUri(Context context, java.io.File imageFile) {  
           String filePath = imageFile.getAbsolutePath();  
           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");  
               return Uri.withAppendedPath(baseUri, "" + id);  
           } else {  
               if (imageFile.exists()) {  
                   ContentValues values = new ContentValues();  
                   values.put(MediaStore.Images.Media.DATA, filePath);  
                   return context.getContentResolver().insert(  
                           MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);  
               } else {  
                   return null;  
               }  
           }  
       }  
    
    
    
            另外,一篇[Android数据的四种存储体式格式SharePreference、SQLite、Content Provider和File...
    

    ](http://blog.sina.com.cn/s/blog_a227c5730101avnd.html "")

    均可以参考参考

    评论

报告相同问题?

悬赏问题

  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程