跨设备访问DataAbility的坑点! 原创

钟洪发老师
发布于 2021-3-26 22:15
浏览
0收藏

注意!!!访问远程设备的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"

}

 

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
跨设备访问DataAbility源码.zip 7.36M 89次下载
已于2021-3-30 22:28:12修改
3
收藏
回复
举报
9条回复
按时间正序
/
按时间倒序
鸿蒙张荣超
鸿蒙张荣超

👍👍👍

回复
2021-3-26 22:56:49
霹雳冬瓜
霹雳冬瓜

老师, 您有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。。。 

回复
2021-3-27 09:33:40
钟洪发老师
钟洪发老师 回复了 霹雳冬瓜
老师, 您有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,然后就是这三个注意点,加上就可以实现了!

回复
2021-3-28 12:32:59
钟洪发老师
钟洪发老师 回复了 霹雳冬瓜
老师, 您有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。。。

注意你加的权限哈,你的项目包名不一定是我的项目包名哈, { "name": "cn.ybzy.hmsdemo.DataAbilityShellProvider.PROVIDER" },这里cn.ybzy.hmsdemo我的项目对应的,要变哈!

回复
2021-3-28 12:35:04
霹雳冬瓜
霹雳冬瓜 回复了 钟洪发老师
两个设备上的应用必须是同一个应用,我实验的时候是这样的,不同应用的跨设备dataablilty我还没做过实验,这里我写的注意点就是坑点,其他的就是官方文档上同一个设备调用dataability的例子改跨设备加一个deviceid,然后就是这三个注意点,加上就可以实现了!

您是最近做的测试嘛? 我两台真机,做跨设备同应用是不通的。log日志有个401的异常,群里有人说是分布式权限报的异常。 系统版本是bate2  2.0.0.39

回复
2021-3-30 08:48:01
钟洪发老师
钟洪发老师 回复了 霹雳冬瓜
您是最近做的测试嘛? 我两台真机,做跨设备同应用是不通的。log日志有个401的异常,群里有人说是分布式权限报的异常。 系统版本是bate2 2.0.0.39

我一会儿测试一下!有结果回复!

回复
2021-3-30 19:57:53
钟洪发老师
钟洪发老师 回复了 霹雳冬瓜
您是最近做的测试嘛? 我两台真机,做跨设备同应用是不通的。log日志有个401的异常,群里有人说是分布式权限报的异常。 系统版本是bate2 2.0.0.39

已经测试,没有问题,可以跨设备写入和读取

回复
2021-3-30 22:24:50
钟洪发老师
钟洪发老师 回复了 钟洪发老师
我一会儿测试一下!有结果回复!

回复
2021-3-30 22:27:13
钟洪发老师
钟洪发老师 回复了 霹雳冬瓜
您是最近做的测试嘛? 我两台真机,做跨设备同应用是不通的。log日志有个401的异常,群里有人说是分布式权限报的异常。 系统版本是bate2 2.0.0.39

以附件测试源代码!

回复
2021-3-30 22:28:47
回复
    相关推荐