uri-URI 和 ACTION_GET_CONTENT

问题描述

URI 和 ACTION_GET_CONTENT

我想从一个 android 设备中选择一个图像,当我使用下面这段代码时,什么时候要使用 ACTION_GET_CONTENT intent 呢?

// 随机获取图像
    public static Uri getRandomImage(ContentResolver resolver) {

        String[] projection = new String[] { BaseColumns._ID
        };
        Uri uri = new Random().nextInt(1) == 0 ? Media.EXTERNAL_CONTENT_URI
                : Media.INTERNAL_CONTENT_URI;

        Cursor cursor = Media.query(resolver, uri, projection, null,
                MediaColumns._ID);
        if (cursor == null || cursor.getCount() <= 0) {
            return null;
        }

        cursor.moveToPosition(new Random().nextInt(cursor.getCount()));

        return Uri.withAppendedPath(uri, cursor.getString(0));
    }

解决方案

如果你想从android gallery 中选择图像,可以这样

Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, 100);

要返回结果

protected void onActivityResult(int requestCode, int resultCode,
   Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

switch(requestCode) {
case REQ_CODE_PICK_IMAGE:
    if(resultCode == RESULT_OK){
        Uri selectedImage = imageReturnedIntent.getData();
        String[] filePathColumn = {MediaStore.Images.Media.DATA};

        Cursor cursor = getContentResolver().query(
                           selectedImage, filePathColumn, null, null, null);
        cursor.moveToFirst();

        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        String filePath = cursor.getString(columnIndex);
        cursor.close();

        Bitmap yourSelectedImage = BitmapFactory.decodeFile(filePath);
    }
}
}

解决方案二:

protected void select() {
        Intent intent = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(intent, 1);
    }

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode==RESULT_OK){
            switch (requestCode) {
            case 1:
                Uri uri = data.getData();
                String[] col = {MediaStore.Images.Media.DATA};
                Cursor c = getContentResolver().query(uri, col, null, null, null);
                c.moveToFirst();
                String imgpath = c.getString(c.getColumnIndex(col[0]));
                iv_imgage.setImageURI(Uri.parse(imgpath));
                c.close();
                break;

            default:
                break;
            }
        }
    }
时间: 2024-10-03 00:18:38

uri-URI 和 ACTION_GET_CONTENT的相关文章

Dojo学习笔记 9. dojo.graphics.color &amp;amp; dojo.uri.Uri

模块:dojo.graphics.color 下面是dojo里定义的颜色名称 dojo.graphics.color.named.white//白色 dojo.graphics.color.named.black//黑色 dojo.graphics.color.named.red//红色 dojo.graphics.color.named.green//绿色 dojo.graphics.color.named.blue//蓝色 dojo.graphics.color.named.navy//海军

精通Grails: 用定制URI和codec优化Grails中的URI

在 "改变 Grails 应用程序的外观" 一文中,我们看到了如何使用层叠样式表(CSS)对一个 Grails 应用程序 - Blogito blog 站点 - 进行外观更改.这次,我将向您展示如何影响 Web 应用程 序的命脉: 用于导航的 URI.这对于像 Blogito 这样的 weblog 极其重要.指向单个条目的那些永久链 接(permalink)被像名片一样在 Internet 上传递:描述性越好,就越有效. 要获得描述性更好的 URI,需要定制控制器代码以支持个性化的 U

详解Android中的ContentProvider和Uri

一.使用ContentProvider(内容提供者)共享数据 ContentProvider在android中的作用是对外共 享数据,也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过 ContentProvider对你应用中的数据进行添删改查.关于数据共享,以前我们学习过文件操作模式,知道通过 指定文件的操作模式为Context.MODE_WORLD_READABLE或Context.MODE_WORLD_WRITEABLE同样也可以对外共享 数

EndpointAddress——不只是一个Uri[上篇]

终结点是整个WCF的核心,由经典的ABC三要素组成.作为表示地址的EndpointAddress,很多人仅仅将其看成是一个表示标识服务并且表示服务所在地址的Uri,其实服务标识和定位服务仅仅是EndpointAddress一个基本的功能,它不仅仅是Uri那么简单. 一.EndpointAddress的三个功能 作为终结点的三要素之一的地址(Address),在基于WCF的通信中不仅仅定位着服务的位置,而且还提供额外的寻址信息.除此之外,终结点地址还和安全有关系,因为它包含着用于进行服务认证的服务

uri-反向排序一个 Uri 变量

问题描述 反向排序一个 Uri 变量 我想反向排序一个 Uri 变量. Uri 访问手机通话记录: Uri allCalls = Uri.parse("content://call_log/calls"); 当我反向排序时,它们还是从最原始的存储到最新的. 我使用: Collections.reverse 好像只能在数组中这么做,如何解决这个问题呢? 解决方案 当你使用 ContentResover 的查询功能时,可以输入排序选项. 查询(Uri uri, String[] proje

android 根据uri获取真实路径

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 public static String getRealFilePath( final Context context, final Uri uri ) {           if ( null == uri ) return null;           final String scheme = uri.getScheme();         String

delphi xe 之路(28)开发 Android URI简介

URI是安卓开发环境中非常重要的组成部分,理解了URI的正确使用,可以为XE5 for Android的开发省下不少研究时间.虽然代码与平台是Android下的,但对于XE5的开发人员来讲又是不可或缺的,同时也找不到好的XE5下使用范例,先将基本概念贴文如下,然后慢慢转到XE5下的应用 就Android平台而言,URI主要分三个部分:scheme, authority and path.其中authority又分为host和port.格式如下: scheme://host:port/path 举

Java魔法堂:URI、URL(含URL Protocol Handler)和URN

一.前言   过去一直搞不清什么是URI什么是URL,现在是时候好好弄清楚它们了!本文作为学习笔记,以便日后查询,若有纰漏请大家指正!   二.从URI说起    1. 概念   URI(Uniform Resource Identifier,统一资源标识符)以字符串来表示某种资源的统一资源标识.   格式为: [scheme:]scheme-specific-part[#fragment]    [scheme:]组件 ,URI的名称空间标识.   scheme-specific-part组件

JS的一些扩展:String、StringBuilder、Uri

在最近一个小屁项目中,没有服务端(其实服务端是人家早已经写好的服务),留给我的就只有一大堆的Html和JS,写的好烦躁,所以就写了几个扩展. 多个不说的,这里只是记录,code附上,便以后查询: ; String.format = function() {      var s = arguments[0];      for (var i = 0; i < arguments.length - 1; i++) {          var reg = new RegExp("\\{&qu

利用Uri获取返回的参数即getQueryParameter()方法的使用

有的时候需要从URL中获取一些重要的参数. 最好不要利用处理String的手段来做,可以方便地使用URI达到目的. 步骤如下: 1 将String类型的URL转变为URI 2 利用URI的getQueryParameter方法获取参数 例如在Twitter的认证过程中需要获取oauth_token和oauth_verifier 过程如下: Uri uri = Uri.parse(url); String testToken = uri.getQueryParameter("oauth_token