跨设备访问DataAbility的坑点! 原创
注意!!!访问远程设备的Data Ability除了上面讲的uri里添加DevcieId以外,必须注意下面几点:
1. 要定义应用级别的访问Data Abiltiy的权限
"defPermissions": [
{ "name": "cn.ybzy.hmsdemo.DataAbilityShellProvider.PROVIDER", "grantMode": "system_grant" }
]
2. 要加分布式数据同步和设备信息获取权限
"reqPermissions": [
{ "name": "ohos.permission.GET_DISTRIBUTED_DEVICE_INFO" },
{ "name": "ohos.permission.DISTRIBUTED_DATASYNC" },
{ "name": "ohos.permission.READ_USER_STORAGE" },
{ "name": "cn.ybzy.hmsdemo.DataAbilityShellProvider.PROVIDER" }
]
requestPermissionsFromUser(new String[]{"ohos.permission.DISTRIBUTED_DATASYNC", "ohos.permission.servicebus.ACCESS_SERVICE", "com.huawei.hwddmp.servicebus.BIND_SERVICE"}, 0);
3. Data Ability的注册信息中一定要打开允许其他应用访问的权限
{
"visible": true, //最后的坑,创建Data Ability时候不会自动添加
"permissions": [ "cn.ybzy.hmsdemo.DataAbilityShellProvider.PROVIDER" ],
"name": "cn.ybzy.hmsdemo.SimpleDataAbility",
"icon": "$media:icon",
"description": "hap sample empty provider",
"type": "data", "uri": "dataability://cn.ybzy.hmsdemo.SimpleDataAbility"
}
👍👍👍
老师, 您有demo嘛, 按照配置弄了好久 就是调不通两个设备的DataAbility调用。有个疑点:设备B上的应用b如何申请设备A上应用A的data ability设置的自定义权限?
在应用B的config中配置应用A的权限名:
"reqPermissions": [
{ "name": "cn.ybzy.hmsdemo.DataAbilityShellProvider.PROVIDER" }
]
int a = verifySelfPermission("cn.ybzy.hmsdemo.DataAbilityShellProvider.PROVIDER");
a的值是-1,说明没获取到权限。我这边是设备B只装应用B,没有装应用A。。。
两个设备上的应用必须是同一个应用,我实验的时候是这样的,不同应用的跨设备dataablilty我还没做过实验,这里我写的注意点就是坑点,其他的就是官方文档上同一个设备调用dataability的例子改跨设备加一个deviceid,然后就是这三个注意点,加上就可以实现了!
注意你加的权限哈,你的项目包名不一定是我的项目包名哈, { "name": "cn.ybzy.hmsdemo.DataAbilityShellProvider.PROVIDER" },这里cn.ybzy.hmsdemo我的项目对应的,要变哈!
您是最近做的测试嘛? 我两台真机,做跨设备同应用是不通的。log日志有个401的异常,群里有人说是分布式权限报的异常。 系统版本是bate2 2.0.0.39
我一会儿测试一下!有结果回复!
已经测试,没有问题,可以跨设备写入和读取
以附件测试源代码!