Android圖庫(系統相冊)的數據庫

​ 最近參加了一個訓練營,要做一個本地圖片查看器的App(Android端),基礎功能要支持圖片列表的展示,參考了我的手機相冊,它是按日期分類展示,於是我也想做成這樣。

系統相冊的樣子:

網上搜索了一番,數據庫中主要有3個字段跟時間有關的

  • date_added:圖片添加的時間

  • date_modify:圖片上一次修改的時間

  • date_taken:圖片拍攝時間(不確定是不是,暫且這麼認爲)

分別用這3個字段按降序排序,最後發現date_taken的效果跟系統相冊是一樣的,於是只用了這個字段。

後來想看看數據庫中的表長什麼樣,看有沒有字段的定義,經過一番搜索,發現

圖片數據庫實際是 /data/data/com.android.providers.media/external.dbfiles表的視圖

external.db中的表和視圖如下:

1.該數據庫文件從Android模擬器獲取的方式:

①adb 命令

1.adb shell
2.su
3.找到文件路徑 退出shell
4.拷貝 到 /sdcard/目錄下(沒有權限時需要這樣做)
5.再從/sdcard/ 導出到電腦硬盤上

注:android 7.0的系統模擬器沒有訪問data/data的權限,su的權限都沒有

②AndroidStudio(3.6.3) 中菜單欄View->Tool Windows->Device File Explorer

在這裏插入圖片描述

注:拷出來的時候.db-shm 還有.db-wal一併拷出來

2.表結構

該視圖創建語句:

CREATE VIEW images AS SELECT _id,_data,_size,_display_name,mime_type,title,date_added,date_modified,description,picasa_id,isprivate,latitude,longitude,datetaken,orientation,mini_thumb_magic,bucket_id,bucket_display_name,width,height FROM files WHERE media_type=1

files表 建表語句

CREATE TABLE "files" (
	"_id"	INTEGER,
	"_data"	TEXT UNIQUE COLLATE NOCASE,
	"_size"	INTEGER,
	"format"	INTEGER,
	"parent"	INTEGER,
	"date_added"	INTEGER,
	"date_modified"	INTEGER,
	"mime_type"	TEXT,
	"title"	TEXT,
	"description"	TEXT,
	"_display_name"	TEXT,
	"picasa_id"	TEXT,
	"orientation"	INTEGER,
	"latitude"	DOUBLE,
	"longitude"	DOUBLE,
	"datetaken"	INTEGER,
	"mini_thumb_magic"	INTEGER,
	"bucket_id"	TEXT,
	"bucket_display_name"	TEXT,
	"isprivate"	INTEGER,
	"title_key"	TEXT,
	"artist_id"	INTEGER,
	"album_id"	INTEGER,
	"composer"	TEXT,
	"track"	INTEGER,
	"year"	INTEGER CHECK("year" != 0),
	"is_ringtone"	INTEGER,
	"is_music"	INTEGER,
	"is_alarm"	INTEGER,
	"is_notification"	INTEGER,
	"is_podcast"	INTEGER,
	"album_artist"	TEXT,
	"duration"	INTEGER,
	"bookmark"	INTEGER,
	"artist"	TEXT,
	"album"	TEXT,
	"resolution"	TEXT,
	"tags"	TEXT,
	"category"	TEXT,
	"language"	TEXT,
	"mini_thumb_data"	TEXT,
	"name"	TEXT,
	"media_type"	INTEGER,
	"old_id"	INTEGER,
	"storage_id"	INTEGER,
	"is_drm"	INTEGER,
	"width"	INTEGER,
	"height"	INTEGER,
	PRIMARY KEY("_id" AUTOINCREMENT)
);

3.這個.db文件macOS的打開方法之一

下載地址http://www.sqlitebrowser.org/

在這裏插入圖片描述

4.MediaStore.Images.Media.EXTERNAL_CONTENT_URI

​ 這個uri對象的getPath()方法返回的值是“/external/images/media”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章