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

问题描述

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

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

解决方案

文件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 "")

均可以参考参考

解决方案二:

参考: http://blog.csdn.net/thini/article/details/9980007

时间: 2024-10-24 16:44:31

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

set-【安卓新手求助】关于数据库、服务器、客户端之间关系的问题,我已经彻底糊涂了

问题描述 [安卓新手求助]关于数据库.服务器.客户端之间关系的问题,我已经彻底糊涂了 想跟好哥们一起做一个app,无奈都要重头开始.听一个大神讲了很多却发现几乎听不懂.当前已用eclipse搭建了几个界面,这是用在客户端的我明白,但是为啥服务端也要用eclipse编写啊?大神先说用json后说javabean,我在网上搜索了一圈,还是不太懂为什么服务端和客户端的编写都用eclipse,用javabean编写客户端也添加在这个工程里吗?那get,set用javabean编写?客户端在写get,se

模拟器创建-安卓新手,完全不会。想建个平板模拟器。不知道怎么填。谁能截个图

问题描述 安卓新手,完全不会.想建个平板模拟器.不知道怎么填.谁能截个图 解决方案 解决方案二: 解决方案三: http://jingyan.baidu.com/article/c74d600068ad420f6a595dd2.html 参考上面的步骤. 解决方案四: 重点是红框那里,左边x右边,要选左边大于右边的 解决方案五: Device设备这一栏选择Tablet

一行放两个按钮-安卓新手页面画不出来,求大神指教

问题描述 安卓新手页面画不出来,求大神指教 我想知道安卓有没有像java中的div一样的东西我在画页面,用的表格布局,有一列要放两个按钮,可是不知道怎么弄,因为是新手,也不太懂,我画出来的样子:可是我需要的是这个样子:只要把那两个按钮放一起就可以了.那一行我的代码: android:id=""@+id/send_notice_content"" android:layout_width=""wrap_content"" and

安卓开发-安卓新手求解答,页面传值跳转

问题描述 安卓新手求解答,页面传值跳转 求大神指导 :在安卓开发中,在第一个界面输入数值计算,点击求值按钮时不显示答案但跳转另一界面("正在计算--"),等待数秒返回第一界面显示结果 解决方案 http://tieba.baidu.com/p/3476742007 解决方案二: 在最外层的Relativelayout里建立一个visibility:gone,长宽fillparent的layout,加入正在计算的textview,里面也可以加一个processbar控件,显示正在缓冲图片

安卓应用开发-安卓新手求教类的问题

问题描述 安卓新手求教类的问题 最近学习安卓蓝牙开发,看到如下代码,ba = BluetoothAdapter.getDefautAdapter(),以前学c++感觉函数调用都是用对象来调用,而BluetoothAdapter是个类,没实例化,为啥可以这么用? 解决方案 getDefautAdapter()在这个内部肯定有实例化的. 看java设计模式之工厂模式 解决方案二: 由于 BT 是一个硬件,不可能被多个实例!所以,不能给每个应用都来实例化.getDefautAdapter 中引用 BT

信息-c#Opencv 不支持URI格式

问题描述 c#Opencv 不支持URI格式 Bitmap bitmap = new Bitmap( @"E:work1.bmp"); Image testImage = new Image(bitmap); 第二句报错:"System.ArgumentException"类型的第一次机会异常在 mscorlib.dll 中发生 其他信息: 不支持 URI 格式 请问是什么问题呀,急急急

安卓网-安卓新手,求大神解答

问题描述 安卓新手,求大神解答 public abstract class MaterialNavigationDrawer extends ActionBarActivity implements MaterialSectionListener求解这里的类型定义 MaterialNavigationDrawer 解决方案 这是类名,要什么定义呀.看不懂

源代码-安卓 想实现简易通讯录 关于listview有些疑问

问题描述 安卓 想实现简易通讯录 关于listview有些疑问 我想做简单点 每一行显示姓名和电话 但是需要点击它之后提示 删除 修改 操作 用哪个适配器合适呢? 联系人信息我是调的服务器接口! 谁有类似功能的源代码吗? 复杂的我目前还看不懂, 谢谢! 解决方案 listview+adapter就够了啊,你还要啥,服务器接口返给你数据,你添加到adapter的数据源里就行了,剩下的在getview中处理,点击可以在listview的item的点击监听中处理 解决方案二: 如果想炫酷一点,自定义控

URI格式

URI貌似属于比较基本的一种协议,虽然我经常记不住它的具体格式.今天在WIKI上看到一个比较详细的格式描述,所以copy下来保留,仅此而已.出自:http://en.wikipedia.org/wiki/URI_scheme <scheme name> : <hierarchical part> [ ? <query> ] [ # <fragment> ] The following figure displays two example URIs (foo