• 1.2.3 使用MediaStore检索图像


       为了说明在Android上使用共享内容提供器的能力,一个示例是使用它们可以很容易的创建一个类似的图像库应用程序。由于内容提供器(当前为MediaStore)在应用程序之间共享,因此为了使得我们自己的应用程序可以查看图像,实际上不需要创建一个摄像头应用程序并采取方法来存储图像。由于大多数应用程序将使用默认的MediaStore,因此可以利用它来建立我们自己的图像库应用程序。

       从MediaStore中选择非常的简单。可以使用用于创建新纪录相同Uri来从中选择记录。

    Media.EXTERNAL_CONTENT_URI

        MediaStore和所有的内容提供器都以类似数据库的方式运作。从他们中选择记录,获得一个Cursor对象,并通过它来遍历结果。

        为了实现选择,首先需要创建一个想要返回的列的字符串数组。对于MediaStore中的图像,其标准列在MediaStore.Images.Media类中表示。

    String []columns={Media.DATA,Media._ID,Media.TITLE,Media.DISPLAY_NAME};

        为了执行实际查询,可以使用活动managedQuery方法。第一个参数是Uri,随后是列名称的数组,后跟一条限定的WHERE子句和WHERE子句的任何参数,最后是一条ORDER BY 子句。

        以下将选择在最近一个小时内创建的记录,并按照从远到近的顺序对他们进行排序。

        首先创建一个称为oneHourAgo的变量,该变量将存储从1970年1月1日到一小时前所经过的秒数。System.currentTimeMillis()将返回相同日期以来的毫秒数,所以除以1000将获得秒数。如果减去60分X60秒,那么将获得一个小时前的值。

    String [] whereValues={""+oneHourAgo};

       然后,选择想要返回的列。

    String []columns={Media.DATA,Media._ID,Media.TITLE,Media.DISPLAY_NAME,Media.DATE_ADDED};

       最后执行该查询。WHERE子句中有一个“?”,它将会被下一个参数中的值所替换。如果存在多个“?”,那么在传入的数组中必须有多个值。这里使用ORDER BY 子句指定返回的数据将以添加的日期升序排列。

    cursor=managedQuery(Media.EXTERNAL_CONTENT_URI, columns, Media.DATE_ADDED+">?", whereValues, Media.DATE_ADDED+"ASC")

       当然如果希望返回所有的记录,那么可以对后面的3个参数传入null值。

    Cursor cursor=managedQuery(Media.EXTERNAL_CONTENT_URI, columns,null, null, null);

       返回的游标会告诉我们当前选择的每个列的索引。

    displayColumnIndex=cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);

        为了从游标中选择字段,需要使用此索引。首先通过moveToFirst方法,确保游标是有效的并包含一些结果。如果游标不包含任何结果,那么该方法将返回false。我们使用Cursor类中的几种方法之一来选择实际的数据。选择的方法取决于数据的类型,例如getString用于字符串,getInt用于整数等。

    1         if(cursor.moveToFirst()){
    2             String displayName=cursor.getString(displayColumnIndex);
    3         }
  • 相关阅读:
    echarts设置y轴线的样式
    echarts基础配置信息?
    提高网站用户体验使网站更好发展的五大要点
    没有或很少有出站链接的网站存在致命的缺陷
    网络推广之百度知道推广技巧
    如何让百度3分钟内收录你的文章
    CSS强制换行
    如何提高网站在搜索引擎中的权重
    js闭包深入详解
    深入浅出之正则表达式
  • 原文地址:https://www.cnblogs.com/ZSS-Android/p/3925069.html
Copyright © 2020-2023  润新知