OpenHarmony 数据共享实现路径总览
方式一 跨应用同设备 UDMF 统一数据通道
// 应用A:写入
import { unifiedDataChannel, uniformTypeDescriptor } from '@kit.ArkData';
import { BusinessError } from '@kit.BasicServicesKit';
let plainText = new unifiedDataChannel.PlainText();
plainText.textContent = 'user_12345';
let unifiedData = new unifiedDataChannel.UnifiedData(plainText);
let options: unifiedDataChannel.Options = {
intention: unifiedDataChannel.Intention.DATA_HUB
};
unifiedDataChannel.insertData(options, unifiedData, (err, data) => {
if (err === undefined) {
console.info(`Succeeded in inserting data. key = ${plainText.textContent}`);
} else {
console.error(`Failed to insert data. code=${err.code}, message=${err.message}`);
}
});
// 应用B:读取
import { unifiedDataChannel, uniformTypeDescriptor } from '@kit.ArkData';
import { BusinessError } from '@kit.BasicServicesKit';
let options: unifiedDataChannel.Options = {
intention: unifiedDataChannel.Intention.DATA_HUB
};
unifiedDataChannel.queryData(options, (err, result) => {
if (err === undefined && result) {
// 解析 result 中的 UnifiedData,按类型读取内容
console.info(`Query result: ${JSON.stringify(result)}`);
} else {
console.error(`Query failed. code=${err?.code}, message=${err?.message}`);
}
});
方式二 跨设备同应用 分布式数据对象
import distributedObject from '@ohos.data.distributedDataObject';
// 设备A:创建并加入会话
let objA = distributedObject.createDistributedObject({ name: 'Amy', age: 18, isVis: false });
objA.setSessionId('session-001');
objA.on('change', (sessionId, changeData) => {
changeData.forEach((k) => console.info(`changed: ${k} = ${objA[k]}`));
});
// 设备B:加入同一会话
let objB = distributedObject.createDistributedObject({ name: '', age: 0, isVis: false });
objB.setSessionId('session-001');
objB.on('change', (sessionId, changeData) => {
changeData.forEach((k) => console.info(`changed: ${k} = ${objB[k]}`));
});
方式三 系统级代理刷新卡片的数据共享
{
"forms": [
{
"name": "WidgetProcessData",
"src": "./ets/widgetprocessdata/pages/WidgetProcessDataCard.ets",
"uiSyntax": "arkts",
"updateEnabled": true,
"dataProxyEnabled": true,
"defaultDimension": "2*2"
}
]
}
// onAddForm 返回订阅信息
import formBindingData from '@ohos.app.form.formBindingData';
import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility';
import type Want from '@ohos.app.form.Want';
export default class ProcessDataFormAbility extends FormExtensionAbility {
onAddForm(want: Want): formBindingData.FormBindingData {
const key = 'datashareproxy://com.samples.widgetupdatebyproxy/weather';
const subscriberId = '11'; // 也可使用 formId
const proxyData = { key, subscriberId };
return formBindingData.createFormBindingData(proxyData);
}
}
方式四 跨应用跨设备 DataAbility + URI
选型与落地建议
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。