资源描述:
《Android如何通过content provider构建媒体文件数据库.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Android如何通过contentprovider构建媒体文件数据库 Android为Camera,Audio,Video等媒体文件提供MediaProvider用于数据的保存,删除,检索等。MediaProvider实现了ContentProvider类的几个操作SQL的重要方法如insert,delete,updata,query。MediaProvider中DatabaseHelper类用于获取与创建Database。 privatestaticfinalclassDatabaseHelperextendsSQLiteOpenHelper{ finalContextmContext
2、; finalbooleanmInternal;//Trueifthisistheinternaldatabase //Inmemorycachesofartistandalbumdata. HashMapmArtistCache=newHashMap(); HashMapmAlbumCache=newHashMap(); publicDatabaseHelper(Contextcontext,Stringname,booleaninternal){ super(context,
3、name,null,DATABASE_VERSION); mContext=context; mInternal=internal; } /** *Createsdatabasethefirsttimewetrytoopenit. */ @Override//第一次打开数据库时创建Table publicvoidonCreate(finalSQLiteDatabasedb){ updateDatabase(db,mInternal,0,DATABASE_VERSION); } 以Camera的image文件文件为例,数据库在第一次使用的时候被创建,对于image文件,SQ
4、L在updateDatabase为其创建一个table: db.execSQL("CREATETABLEIFNOTEXISTSimages("+ "_idINTEGERPRIMARYKEY,"+//文件保存的序号 "_dataTEXT,"+//记录image文件保存路径 "_sizeINTEGER,"+//文件大小 "_display_nameTEXT,"+//图片名称 "mime_typeTEXT,"+//文件类型 "titleTEXT,"+ "date_addedINTEGER,"+ "date_modifiedINTEGER,"+ "descriptionTEXT,"
5、+ "picasa_idTEXT,"+ "isprivateINTEGER,"+ "latitudeDOUBLE,"+ "longitudeDOUBLE,"+ "datetakenINTEGER,"+ "orientationINTEGER,"+ "mini_thumb_magicINTEGER,"+ "bucket_idTEXT,"+ "bucket_display_nameTEXT"+ ");"); 添加URI到match这个也很重要,因为不同类型的文件会保存在不同的table中,如果我们得到一个URI为:content://media/external/images/
6、media/1通过UriMatcher.match(uri)将返回注册的IMAGES_MEDIA_ID值。 URI_MATCHER.addURI("media","*/images/media",IMAGES_MEDIA); URI_MATCHER.addURI("media","*/images/media/#",IMAGES_MEDIA_ID); URI格式解析如下: URI格式中最重要的字段是authority,authority确定了操作数据库的Provider是由谁提供的。MediaProvider在AndroidManifest.xml中添加如下语句: 7、android:name="MediaProvider"android:authorities="media" android:multiprocess="false"/> Provider加载 MediaProvider安装在手机中,ContentResolver通过acquireProvider请求加载Provider程序。acquireProvider正是通过解析URI中的author