Data Ability
Data提供方可以自定义数据的增、删、改、查,以及文件打开等功能,并对外提供这些接口。
Data存储方式有两种:
文件数据:如文本、图片、音乐等。
结构化数据:如数据库等。
UserDataAbility
用来接收其他APP发送的请求,提供外部程序访问的入口,从而实现应用间的数据访问
实现UserDataAbility,需要在“Project”窗口当前工程的主目录(“entry > src > main > java > com.xxx.xxx”)选择“File > New > Ability > Empty Data Ability”,设置“Data Name”后完成UserDataAbility的创建。
文件存储
在Data中重写FileDescriptor openFile
通过uri来获取
@Override
public FileDescriptor openFile(Uri uri, String mode) throws File NotFoundException {
// 创建messageParcel
MessageParcel messageParcel = MessageParcel.obtain();
File file = new File(uri.getDecodedPathList().get(1));
if (mode == null || !"rw".equals(mode)) {
file.setReadOnly();
}
FileInputStream fileIs = new FileInputStream(file);
FileDescriptor fd = fileIs.getFD();
// 绑定文件描述符
return messageParcel.dupFileDescriptor(fd);
}
数据库存储
初始化数据库连接。
系统会在应用启动时调用onStart()方法创建Data实例。
private static final String DATABASE_NAME ="UserDataAbility.db";
private static final String DATABASE_NAME_ALIAS = "UserDataAbility";
private static final HiLogLabel LABEL_LOG = new HiLogLabel(HiLog.LOG_APP, 0xD00201, "Data_Log");
private OrmContext ormContext = null;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
DatabaseHelper manager = new DatabaseHelper(this);
ormContext = manager.getOrmContext(DATABASE_NAME_ALIAS, DATABASE_NAME, BookStore.class);
}
查询数据库
ResultSet query(Uri uri, String[] columns, DataAbilityPredicates predicates)
向数据库中插入单条数据
int insert(Uri uri, ValuesBucket value)
向数据库中插入多条数据
int batchInsert(Uri uri, ValuesBucket[] values)
删除一条或多条数据
int delete(Uri uri, DataAbilityPredicates predicates)
更新数据库
int update(Uri uri, ValuesBucket value, DataAbilityPredicates predicates)
批量操作数据库
DataAbilityResult[] executeBatch(ArrayList<DataAbilityOperation> operations)