正文

图像存储和元数据(10)

Android多媒体开发高级编程 作者:(美)艾佛瑞


与前面的示例一样,当Camera应用程序返回时触发onActivityResult 方法。将新创建的图像解码成Bitmap形式并显示。在此版本中,对相关的用户界面元素也进行了管理。

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分×60秒,那么将获得一个小时前的值。

long oneHourAgo = System.currentTimeMillis()/1000 - (60 * 60);

接着,将该值放入作为WHERE子句参数的字符串数组。

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

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

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

Media.DATE_ADDED };


上一章目录下一章

Copyright © 读书网 www.dushu.com 2005-2020, All Rights Reserved.
鄂ICP备15019699号 鄂公网安备 42010302001612号