1# RingtoneLibrary组件 2 3- [简介](#section1158716411637) 4- [目录](#section161941989596) 5- [使用说明](#usage-guidelines) 6- [相关仓](#section1533973044317) 7 8## 简介<a name="section1158716411637"></a> 9**ringtone\_library** 仓库提供了一系列易用的接口用于设定及获取系统铃音信息。 10**ringtone\_library** 提供了标准DataShareExtension接口,支持存储及查询通过SystemSoundManager设置的自定义来电/闹钟/短信/系统通知铃音文件。 11系统应用及音乐开放能力RingtoneKit通过SystemSoundManager设置及查询自定义铃音,非系统应用通过音乐开放能力RingtoneKit设置及查询自定义铃音。 12 13**图1** ringtonelibrary组件架构图 14 15 16支持能力列举如下: 17- 读取铃音内容 18- 存储和删除自定义铃音 19- 读取铃音列表,包含系统铃音和自定义铃音 20- 扫描系统预制铃音目录 21 22## 目录<a name="section161941989596"></a> 23仓库目录结构如下: 24``` 25/foundation/multimedia/ringtone_library/ # 铃音库组件代码 26├── frameworks # 框架代码 27├── interfaces # 接口代码 28│ └── inner_api # 内部native接口 29├── LICENSE # 证书文件 30├── services # 铃音库服务实现 31│ ├── ringtone_backup # 铃音库备份升级服务 32│ ├── ringtone_data_extension # 扩展插件接口 33│ ├── ringtone_dfx # DFX实现 34│ ├── ringtone_helper # 辅助类 35│ └── ringtone_scanner # 扫描功能实现 36└── test # 测试代码 37``` 38 39## 使用说明<a name="usage-guidelines"></a> 40### 概述 41提供铃音列表的增、删、改、查等接口,可以通过Uri("datashare:///ringtone/ringtone")对铃音列表进行操作。 42接口参数主要有对象类型的Uri、DataSharePredicates和DataShareValuesBucket等。 43 44使用接口功能前,需要先获取DataShareHelper 45```cpp 46auto saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); 47auto remoteObj = saManager->GetSystemAbility(systemAbilityId); 48std::shared_ptr<DataShare::DataShareHelper> datashareHelper = DataShare::DataShareHelper::Creator(remoteObj, "datashare:///ringtone/ringtone"); 49``` 50 51### 新增铃音接口 52#### datashareHelper->Insert(const Uri &uri, const DataShareValuesBucket &value); 53 54- 参数描述 55 56 | 名称 | 读写属性 | 类型 | 必填 | 描述 | 57 | -------- | -------- | ---------------------- | ---- | ------------------------------ | 58 | uri | 只读 | Uri& | 是 | 铃音库操作Uri("datashare:///ringtone/ringtone") | 59 | value | 只读 | DataShareValuesBucket& | 是 | 数据库字段key-value对象 | 60 61- 返回值 62 63 来电铃音id 64 65- 示例 66 ```cpp 67 Uri ringtoneUri("datashare:///ringtone/ringtone"); 68 int32_t index = 0; 69 const int32_t count = 10; 70 const int64_t ringtoneSize = 1022; 71 const int type = 2; 72 const int64_t addedTime = 1559276453; 73 const int64_t modifiedTime = 1559276455; 74 const int64_t takenTime = 1559276457; 75 const int durationTime = 112; 76 DataShareValuesBucket valuesBucket; 77 valuesBucket.Put(RINGTONE_COLUMN_DATA, 78 static_cast<string>("/path_to_target/test_ringtone.ogg")); 79 valuesBucket.Put(RINGTONE_COLUMN_SIZE, static_cast<int64_t>(ringtoneSize)); 80 valuesBucket.Put(RINGTONE_COLUMN_DISPLAY_NAME, static_cast<string>("test_ringtone.ogg"); 81 valuesBucket.Put(RINGTONE_COLUMN_TITLE, static_cast<string>("test_ringtone")); 82 valuesBucket.Put(RINGTONE_COLUMN_MEDIA_TYPE, static_cast<int>(type)); 83 valuesBucket.Put(RINGTONE_COLUMN_TONE_TYPE, static_cast<int>(type)); 84 valuesBucket.Put(RINGTONE_COLUMN_MIME_TYPE, static_cast<string>("ogg")); 85 valuesBucket.Put(RINGTONE_COLUMN_SOURCE_TYPE, static_cast<int>(1)); 86 valuesBucket.Put(RINGTONE_COLUMN_DATE_ADDED, static_cast<int64_t>(addedTime)); 87 valuesBucket.Put(RINGTONE_COLUMN_DATE_MODIFIED, static_cast<int64_t>(modifiedTime)); 88 valuesBucket.Put(RINGTONE_COLUMN_DATE_TAKEN, static_cast<int64_t>(takenTime)); 89 valuesBucket.Put(RINGTONE_COLUMN_DURATION, static_cast<int>(durationTime)); 90 valuesBucket.Put(RINGTONE_COLUMN_SHOT_TONE_TYPE, static_cast<int>(1)); 91 valuesBucket.Put(RINGTONE_COLUMN_SHOT_TONE_SOURCE_TYPE, static_cast<int>(type)); 92 valuesBucket.Put(RINGTONE_COLUMN_NOTIFICATION_TONE_TYPE, static_cast<int>(1)); 93 valuesBucket.Put(RINGTONE_COLUMN_NOTIFICATION_TONE_SOURCE_TYPE, static_cast<int>(type)); 94 valuesBucket.Put(RINGTONE_COLUMN_RING_TONE_TYPE, static_cast<int>(1)); 95 valuesBucket.Put(RINGTONE_COLUMN_RING_TONE_SOURCE_TYPE, static_cast<int>(type)); 96 valuesBucket.Put(RINGTONE_COLUMN_ALARM_TONE_TYPE, static_cast<int>(1)); 97 valuesBucket.Put(RINGTONE_COLUMN_ALARM_TONE_SOURCE_TYPE, static_cast<int>(type)); 98 int32_t ret = dataShareHelper->Insert(ringtoneUri, valuesBucket); 99 ``` 100 101### 删除铃音接口 102#### datashareHelper->Delete(const Uri &uri, const DataSharePredicates &predicates); 103 104- Delete参数描述 105 106 | 名称 | 读写属性 | 类型 | 必填 | 描述 | 107 | -------- | -------- | ---------------------- | ---- | ------------------------------ | 108 | uri | 只读 | Uri& | 是 | 铃音库操作Uri("datashare:///ringtone/ringtone") | 109 | condition | 只读 | DataSharePredicates& | 是 | 数据库删除条件 | 110 111- 返回值 112 113 删除的铃音数量 114 115- 示例 116 117 ```cpp 118 Uri ringtoneUri("datashare:///ringtone/ringtone"); 119 DataShare::DataSharePredicates deletePredicates; 120 deletePredicates.SetWhereClause(RINGTONE_COLUMN_TONE_ID + " = ? "); 121 deletePredicates.SetWhereArgs({ to_string(1) }); 122 int32_t ret = g_dataShareHelper->Delete(ringtoneUri, deletePredicates); 123 ``` 124 125### 修改铃音接口 126#### datashareHelper->Update(const Uri &uri, const DataSharePredicates &predicates, const DataShareValuesBucket &value); 127 128- Update参数描述 129 130 | 名称 | 读写属性 | 类型 | 必填 | 描述 | 131 | -------- | -------- | ---------------------- | ---- | ------------------------------ | 132 | uri | 只读 | Uri& | 是 | 具体操作的uri | 133 | condition | 只读 | DataSharePredicates& | 是 | 数据库更新条件 | 134 | value | 只读 | DataShareValuesBucket& | 是 | 数据库字段key-value对象 | 135 136- 返回值 137 138 修改的铃音数量 139 140- 示例 141 ```cpp 142 Uri ringtoneUri("datashare:///ringtone/ringtone"); 143 DataShare::DataSharePredicates updatePredicates; 144 updatePredicates.SetWhereClause(RINGTONE_COLUMN_TONE_ID + " = ? "); 145 updatePredicates.SetWhereArgs({ to_string(1) }); 146 DataShareValuesBucket updateValuesBucket; 147 updateValuesBucket.Put(RINGTONE_COLUMN_SHOT_TONE_TYPE, 0); 148 updateValuesBucket.Put(RINGTONE_COLUMN_SHOT_TONE_SOURCE_TYPE, 0); 149 int32_t ret = dataShareHelper->Update(ringtoneUri, deletePredicates, updateValuesBucket); 150 ``` 151 152### 查询铃音接口 153#### datashareHelper->Query(const Uri &uri, const DataSharePredicates &predicates, std::vector<std::string> &columns, DatashareBusinessError &businessError); 154 155- Query参数描述 156 157 | 名称 | 读写属性 | 类型 | 必填 | 描述 | 158 | -------- | -------- | ---------------------- | ---- | ------------------------------ | 159 | uri | 只读 | Uri& | 是 | 铃音库操作Uri("datashare:///ringtone/ringtone") | 160 | condition | 只读 | DataSharePredicates& | 是 | 查询条件 | 161 | resultColumns | 只读 | std::vector<std::string>& | 是 | 需要查询的列字段名称 | 162 | businessError | 只读 | DatashareBusinessError& | 是 | 异常代码 | 163 164- 返回值 165 数据库ResultSet结果集 166 167- 示例 168 ```cpp 169 Uri ringtoneUri("datashare:///ringtone/ringtone"); 170 int errCode = 0; 171 DatashareBusinessError businessError; 172 DataSharePredicates queryPredicates; 173 queryPredicates.EqualTo(RINGTONE_COLUMN_SHOT_TONE_TYPE, to_string(1)); 174 vector<string> columns = { 175 { RINGTONE_COLUMN_TONE_ID }, 176 { RINGTONE_COLUMN_DISPLAY_NAME }, 177 { RINGTONE_COLUMN_DATE_ADDED }, 178 { RINGTONE_COLUMN_SHOT_TONE_TYPE } 179 }; 180 auto resultSet = dataShareHelper->Query(ringtoneUri, queryPredicates, columns, &businessError); 181 ``` 182### RingtoneLibrary数据库表结构 183|字段名|类型|描述| 184|---|---|---| 185|ringtone_id|INTEGER|主键,数据库自增| 186|data|TEXT|铃音文件存储路径| 187|size|BITINT|铃音文件大小| 188|display_name|TEXT|title+后缀| 189|title|TEXT|铃音名称| 190|media_type|TEXT|媒体类型,音频类为2| 191|tone_type|INTEGER|ALARM = 0, RINGTONE = 1, NOTIFICATION = 2, NOTIFICATION可以设置为短信和通知| 192|mime_type|TEXT|UTI类型| 193|source_type|INTEGER|系统预制(1),用户自定义(2)| 194|date_added|BIGINT|时间戳,添加时间| 195|date_modified|BIGINT|时间戳,修改时间| 196|date_taken|BIGINT|时间戳,创建时间| 197|duration|INTEGER|时长,毫秒值| 198|shot_tone_type|INTEGER|短信铃音类型: 非短信音(0),卡1短信音(1),卡2短信音(2),双卡短信音(3)| 199|shot_tone_source_type|INTEGER|系统设置(1),用户设置(2)| 200|notification_tone_type|INTEGER|通知音铃音类型: 非通知音(0),通知音(1)| 201|notification_tone_source_type|INTEGER|系统设置(1),用户设置(2)| 202|ring_tone_type|INTEGER|通话铃音类型: 非通话铃音(0),卡1铃音(1),卡2铃音(2),双卡铃音(3)| 203|ring_tone_source_type|INTEGER|系统设置(1),用户设置(2)| 204|alarm_tone_type|INTEGER|闹钟铃音类型: 非闹钟铃音(0),闹钟铃音(1)| 205|alarm_tone_source_type|INTEGER|系统设置(1),用户设置(2)| 206 207 208## 相关仓<a name="section1533973044317"></a> 209**[multimedia/ringtone_library](https://gitee.com/openharmony/multimedia_ringtone_library)** 210**[multimedia/player_framework](https://gitee.com/openharmony/multimedia_player_framework)** 211