Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Coping0606
Docs
提交
3058ec50
D
Docs
项目概览
Coping0606
/
Docs
与 Fork 源项目一致
Fork自
OpenHarmony / Docs
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
3058ec50
编写于
3月 25, 2022
作者:
O
openharmony_ci
提交者:
Gitee
3月 25, 2022
浏览文件
操作
浏览文件
下载
差异文件
!2507 更新跨设备资料
Merge pull request !2507 from ql/master
上级
320fd845
6de8a743
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
224 addition
and
50 deletion
+224
-50
zh-cn/application-dev/ability/fa-pageability.md
zh-cn/application-dev/ability/fa-pageability.md
+73
-11
zh-cn/application-dev/ability/fa-serviceability.md
zh-cn/application-dev/ability/fa-serviceability.md
+110
-32
zh-cn/application-dev/ability/stage-ability.md
zh-cn/application-dev/ability/stage-ability.md
+20
-3
zh-cn/application-dev/ability/stage-call.md
zh-cn/application-dev/ability/stage-call.md
+21
-4
未找到文件。
zh-cn/application-dev/ability/fa-pageability.md
浏览文件 @
3058ec50
...
@@ -113,26 +113,88 @@ featureAbility.startAbility({
...
@@ -113,26 +113,88 @@ featureAbility.startAbility({
},
},
);
);
```
```
### 启动远程PageAbility
### 启动远程PageAbility
(当前仅对系统应用开放)
*
导入模块
*
导入模块
```
```
import featureAbility from '@ohos.ability.featureAbility'
import featureAbility from '@ohos.ability.featureAbility'
import deviceManager from '@ohos.distributedHardware.deviceManager';
```
```
*
示例
*
示例
```
ts
```
javascript
function
onStartRemoteAbility
()
{
var
promise
=
await
featureAbility
.
startAbility
({
console
.
info
(
'
onStartRemoteAbility begin
'
);
want
:
var
params
;
{
var
wantValue
=
{
deviceId
:
this
.
deviceId
,
bundleName
:
'
ohos.samples.etsDemo
'
,
bundleName
:
"
com.example.test
"
,
abilityName
:
'
ohos.samples.etsDemo.RemoteAbility
'
,
abilityName
:
"
com.example.test.MainAbility
"
,
deviceId
:
getRemoteDeviceId
(),
},
parameters
:
params
};
console
.
info
(
'
onStartRemoteAbility want=
'
+
JSON
.
stringify
(
wantValue
));
featureAbility
.
startAbility
({
want
:
wantValue
}).
then
((
data
)
=>
{
console
.
info
(
'
onStartRemoteAbility finished,
'
+
JSON
.
stringify
(
data
));
});
console
.
info
(
'
onStartRemoteAbility end
'
);
}
```
从DeviceManager获取deviceId,具体示例代码如下:
```
ts
import
deviceManager
from
'
@ohos.distributedHardware.deviceManager
'
;
var
dmClass
;
function
getRemoteDeviceId
()
{
if
(
typeof
dmClass
===
'
object
'
&&
dmClass
!=
null
)
{
var
list
=
dmClass
.
getTrustedDeviceListSync
();
if
(
typeof
(
list
)
==
'
undefined
'
||
typeof
(
list
.
length
)
==
'
undefined
'
)
{
console
.
log
(
"
MainAbility onButtonClick getRemoteDeviceId err: list is null
"
);
return
;
}
console
.
log
(
"
MainAbility onButtonClick getRemoteDeviceId success:
"
+
list
[
0
].
deviceId
);
return
list
[
0
].
deviceId
;
}
else
{
console
.
log
(
"
MainAbility onButtonClick getRemoteDeviceId err: dmClass is null
"
);
}
}
```
在跨设备场景下,需要向用户申请数据同步的权限。具体示例代码如下:
```
ts
import
accessControl
from
"
@ohos.abilityAccessCtrl
"
;
import
bundle
from
'
@ohos.bundle
'
;
async
function
RequestPermission
()
{
console
.
info
(
'
RequestPermission begin
'
);
let
array
:
Array
<
string
>
=
[
"
ohos.permission.DISTRIBUTED_DATASYNC
"
];
var
bundleFlag
=
0
;
var
tokenID
=
undefined
;
var
userID
=
100
;
var
appInfo
=
await
bundle
.
getApplicationInfo
(
'
ohos.samples.etsDemo
'
,
bundleFlag
,
userID
);
tokenID
=
appInfo
.
accessTokenId
;
var
atManager
=
abilityAccessCtrl
.
createAtManager
();
let
requestPermissions
:
Array
<
string
>
=
[];
for
(
let
i
=
0
;
i
<
array
.
length
;
i
++
)
{
var
result
=
await
atManager
.
verifyAccessToken
(
tokenID
,
array
[
i
]);
console
.
info
(
"
verifyAccessToken result:
"
+
JSON
.
stringify
(
result
));
if
(
result
==
abilityAccessCtrl
.
GrantStatus
.
PERMISSION_GRANTED
)
{
}
else
{
requestPermissions
.
push
(
array
[
i
]);
}
}
console
.
info
(
"
requestPermissions:
"
+
JSON
.
stringify
(
requestPermissions
));
if
(
requestPermissions
.
length
==
0
||
requestPermissions
==
[])
{
return
;
}
let
context
=
featureAbility
.
getContext
();
context
.
requestPermissionsFromUser
(
requestPermissions
,
1
,
(
data
)
=>
{
console
.
info
(
"
data:
"
+
JSON
.
stringify
(
data
));
console
.
info
(
"
data requestCode:
"
+
data
.
requestCode
);
console
.
info
(
"
data permissions:
"
+
data
.
permissions
);
console
.
info
(
"
data authResults:
"
+
data
.
authResults
);
});
console
.
info
(
'
RequestPermission end
'
);
}
}
);
```
```
### 生命周期接口说明
### 生命周期接口说明
**表2**
生命周期回调函数介绍
**表2**
生命周期回调函数介绍
...
...
zh-cn/application-dev/ability/fa-serviceability.md
浏览文件 @
3058ec50
...
@@ -183,7 +183,7 @@ export default {
...
@@ -183,7 +183,7 @@ export default {
}
}
```
```
### 连接远程Service<a name="section126857614019"></a>
### 连接远程Service<a name="section126857614019"></a>
(当前仅对系统应用开放)
如果Service需要与Page Ability或其他应用的Service Ability进行跨设备交互,则须创建用于连接的Connection。Service支持其他Ability通过connectAbility()方法与其进行跨设备连接。
如果Service需要与Page Ability或其他应用的Service Ability进行跨设备交互,则须创建用于连接的Connection。Service支持其他Ability通过connectAbility()方法与其进行跨设备连接。
...
@@ -191,7 +191,7 @@ export default {
...
@@ -191,7 +191,7 @@ export default {
创建连接远程Service回调实例的代码示例如下:
创建连接远程Service回调实例的代码示例如下:
```
javascript
```
ts
var
mRemote
;
var
mRemote
;
function
onConnectCallback
(
element
,
remote
){
function
onConnectCallback
(
element
,
remote
){
console
.
log
(
'
ConnectRemoteAbility onConnect Callback
'
)
console
.
log
(
'
ConnectRemoteAbility onConnect Callback
'
)
...
@@ -207,17 +207,35 @@ function onFailedCallback(code){
...
@@ -207,17 +207,35 @@ function onFailedCallback(code){
}
}
```
```
目标Service的Want需要包含远程deviceId,该远程deviceId可通过deviceManager获取。
目标Service的Want需要包含远程deviceId,该远程deviceId可通过deviceManager获取,具体示例代码如下:
```
ts
import
deviceManager
from
'
@ohos.distributedHardware.deviceManager
'
;
var
dmClass
;
function
getRemoteDeviceId
()
{
if
(
typeof
dmClass
===
'
object
'
&&
dmClass
!=
null
)
{
var
list
=
dmClass
.
getTrustedDeviceListSync
();
if
(
typeof
(
list
)
==
'
undefined
'
||
typeof
(
list
.
length
)
==
'
undefined
'
)
{
console
.
log
(
"
MainAbility onButtonClick getRemoteDeviceId err: list is null
"
);
return
;
}
console
.
log
(
"
MainAbility onButtonClick getRemoteDeviceId success:
"
+
list
[
0
].
deviceId
);
return
list
[
0
].
deviceId
;
}
else
{
console
.
log
(
"
MainAbility onButtonClick getRemoteDeviceId err: dmClass is null
"
);
}
}
```
连接远程Service的代码示例如下:
连接远程Service的代码示例如下:
```
javascript
```
ts
import
featureAbility
from
'
@ohos.ability.featureability
'
;
import
featureAbility
from
'
@ohos.ability.featureability
'
;
var
connId
=
featureAbility
.
connectAbility
(
var
connId
=
featureAbility
.
connectAbility
(
{
{
deviceId
:
deviceId
,
deviceId
:
getRemoteDeviceId
()
,
bundleName
:
"
com.jstest.serviceability
"
,
bundleName
:
"
ohos.samples.etsDemo
"
,
abilityName
:
"
com.jstest.serviceability.Main
Ability
"
,
abilityName
:
"
ohos.samples.etsDemo.Service
Ability
"
,
},
},
{
{
onConnect
:
onConnectCallback
,
onConnect
:
onConnectCallback
,
...
@@ -226,48 +244,97 @@ var connId = featureAbility.connectAbility(
...
@@ -226,48 +244,97 @@ var connId = featureAbility.connectAbility(
},
},
);
);
```
```
在跨设备场景下,需要向用户申请数据同步的权限。具体示例代码如下:
```
ts
import
accessControl
from
"
@ohos.abilityAccessCtrl
"
;
import
bundle
from
'
@ohos.bundle
'
;
async
function
RequestPermission
()
{
console
.
info
(
'
RequestPermission begin
'
);
let
array
:
Array
<
string
>
=
[
"
ohos.permission.DISTRIBUTED_DATASYNC
"
];
var
bundleFlag
=
0
;
var
tokenID
=
undefined
;
var
userID
=
100
;
var
appInfo
=
await
bundle
.
getApplicationInfo
(
'
ohos.samples.etsDemo
'
,
bundleFlag
,
userID
);
tokenID
=
appInfo
.
accessTokenId
;
var
atManager
=
abilityAccessCtrl
.
createAtManager
();
let
requestPermissions
:
Array
<
string
>
=
[];
for
(
let
i
=
0
;
i
<
array
.
length
;
i
++
)
{
var
result
=
await
atManager
.
verifyAccessToken
(
tokenID
,
array
[
i
]);
console
.
info
(
"
verifyAccessToken result:
"
+
JSON
.
stringify
(
result
));
if
(
result
==
abilityAccessCtrl
.
GrantStatus
.
PERMISSION_GRANTED
)
{
}
else
{
requestPermissions
.
push
(
array
[
i
]);
}
}
console
.
info
(
"
requestPermissions:
"
+
JSON
.
stringify
(
requestPermissions
));
if
(
requestPermissions
.
length
==
0
||
requestPermissions
==
[])
{
return
;
}
let
context
=
featureAbility
.
getContext
();
context
.
requestPermissionsFromUser
(
requestPermissions
,
1
,
(
data
)
=>
{
console
.
info
(
"
data:
"
+
JSON
.
stringify
(
data
));
console
.
info
(
"
data requestCode:
"
+
data
.
requestCode
);
console
.
info
(
"
data permissions:
"
+
data
.
permissions
);
console
.
info
(
"
data authResults:
"
+
data
.
authResults
);
});
console
.
info
(
'
RequestPermission end
'
);
}
```
同时,Service侧也需要在onConnect()时返回IRemoteObject,从而定义与Service进行通信的接口。onConnect()需要返回一个IRemoteObject对象,OpenHarmony提供了IRemoteObject的默认实现,用户可以通过继承rpc.RemoteObject来创建自定义的实现类。
同时,Service侧也需要在onConnect()时返回IRemoteObject,从而定义与Service进行通信的接口。onConnect()需要返回一个IRemoteObject对象,OpenHarmony提供了IRemoteObject的默认实现,用户可以通过继承rpc.RemoteObject来创建自定义的实现类。
Service侧把自身的实例返回给调用侧的代码示例如下:
Service侧把自身的实例返回给调用侧的代码示例如下:
```
javascript
```
ts
import
rpc
from
"
@ohos.rpc
"
;
import
rpc
from
"
@ohos.rpc
"
;
var
mMyStub
;
class
FirstServiceAbilityStub
extends
rpc
.
RemoteObject
{
export
default
{
constructor
(
des
)
{
onStart
(
want
)
{
if
(
typeof
des
===
'
string
'
)
{
class
MyStub
extends
rpc
.
RemoteObject
{
super
(
des
);
constructor
(
des
)
{
}
else
{
if
(
typeof
des
===
'
string
'
)
{
return
null
;
super
(
des
);
}
return
null
;
}
onRemoteRequest
(
code
,
message
,
reply
,
option
)
{
}
}
}
mMyStub
=
new
MyStub
(
"
ServiceAbility-test
"
);
}
onRemoteRequest
(
code
,
data
,
reply
,
option
)
{
}
}
export
default
{
onStart
()
{
console
.
info
(
'
ServiceAbility onStart
'
);
},
},
on
Command
(
want
,
restart
,
startId
)
{
on
Stop
(
)
{
console
.
log
(
'
ServiceAbility onCommand
'
);
console
.
info
(
'
ServiceAbility onStop
'
);
},
},
onConnect
(
want
)
{
onConnect
(
want
)
{
console
.
log
(
'
ServiceAbility OnConnect
'
);
console
.
log
(
"
ServiceAbility onConnect
"
);
return
mMyStub
;
try
{
},
let
value
=
JSON
.
stringify
(
want
);
onDisconnect
()
{
console
.
log
(
"
ServiceAbility want:
"
+
value
);
console
.
log
(
'
ServiceAbility OnDisConnect
'
);
}
catch
(
error
)
{
console
.
log
(
"
ServiceAbility error:
"
+
error
);
}
return
new
FirstServiceAbilityStub
(
"
first ts service stub
"
);
},
},
onStop
()
{
onDisconnect
(
want
)
{
console
.
log
(
'
ServiceAbility onStop
'
);
console
.
log
(
"
ServiceAbility onDisconnect
"
);
let
value
=
JSON
.
stringify
(
want
);
console
.
log
(
"
ServiceAbility want:
"
+
value
);
},
},
}
onCommand
(
want
,
startId
)
{
console
.
info
(
'
ServiceAbility onCommand
'
);
let
value
=
JSON
.
stringify
(
want
);
console
.
log
(
"
ServiceAbility want:
"
+
value
);
console
.
log
(
"
ServiceAbility startId:
"
+
startId
);
}
};
```
```
## 开发实例
## 开发实例
针对serviceAbility开发,有以下示例工程可供参考:
###
针对serviceAbility开发,有以下示例工程可供参考:
-
[
eTSServiceAbility
](
https://gitee.com/openharmony/app_samples/tree/master/ability/eTSServiceAbility
)
-
[
eTSServiceAbility
](
https://gitee.com/openharmony/app_samples/tree/master/ability/eTSServiceAbility
)
...
@@ -276,3 +343,14 @@ export default {
...
@@ -276,3 +343,14 @@ export default {
在ServiceAbility目录中的service.ts文件创建一个本地Service。
在ServiceAbility目录中的service.ts文件创建一个本地Service。
在MainAbility目录中封装了启动、连接本地Services的流程。
在MainAbility目录中封装了启动、连接本地Services的流程。
### 针对跨设备serviceAbility开发,有以下示例工程可供参考:
-
[
DMS
](
https://gitee.com/openharmony/app_samples/tree/master/ability/DMS
)
本示例DMS中:
在ServiceAbility目录中的service.ts文件创建一个远程Service。
在RemoteAbility目录中封装了连接远程Services的流程。
zh-cn/application-dev/ability/stage-ability.md
浏览文件 @
3058ec50
...
@@ -163,12 +163,12 @@ context.startAbility(want, options).then((data) => {
...
@@ -163,12 +163,12 @@ context.startAbility(want, options).then((data) => {
})
})
```
```
### 跨设备启动Ability
### 跨设备启动Ability
(当前仅对系统应用开放)
跨设备场景下,需指定对端设备deviceId,具体
获取接口参照
[
DeviceManager
](
https://gitee.com/openharmony/device_manager/blob/master/README_zh.md
)
。具体
示例代码如下:
跨设备场景下,需指定对端设备deviceId,具体示例代码如下:
```
ts
```
ts
let
context
=
this
.
context
let
context
=
this
.
context
var
want
=
{
var
want
=
{
"
deviceId
"
:
"
remoteDeviceId
"
,
"
deviceId
"
:
getRemoteDeviceId
()
,
"
bundleName
"
:
"
com.example.MyApplication
"
,
"
bundleName
"
:
"
com.example.MyApplication
"
,
"
abilityName
"
:
"
MainAbility
"
"
abilityName
"
:
"
MainAbility
"
};
};
...
@@ -178,6 +178,23 @@ context.startAbility(want).then((data) => {
...
@@ -178,6 +178,23 @@ context.startAbility(want).then((data) => {
console
.
error
(
"
Failed to start remote ability with error:
"
+
JSON
.
stringify
(
error
))
console
.
error
(
"
Failed to start remote ability with error:
"
+
JSON
.
stringify
(
error
))
})
})
```
```
从DeviceManager获取指定设备的deviceId,具体示例代码如下:
```
ts
import
deviceManager
from
'
@ohos.distributedHardware.deviceManager
'
;
function
getRemoteDeviceId
()
{
if
(
typeof
dmClass
===
'
object
'
&&
dmClass
!=
null
)
{
var
list
=
dmClass
.
getTrustedDeviceListSync
();
if
(
typeof
(
list
)
==
'
undefined
'
||
typeof
(
list
.
length
)
==
'
undefined
'
)
{
console
.
log
(
"
MainAbility onButtonClick getRemoteDeviceId err: list is null
"
);
return
;
}
console
.
log
(
"
MainAbility onButtonClick getRemoteDeviceId success:
"
+
list
[
0
].
deviceId
);
return
list
[
0
].
deviceId
;
}
else
{
console
.
log
(
"
MainAbility onButtonClick getRemoteDeviceId err: dmClass is null
"
);
}
}
```
### 应用向用户申请授权
### 应用向用户申请授权
应用需要某些权限如存储、位置信息、访问日历时,需要向用户申请授权。具体示例代码如下:
应用需要某些权限如存储、位置信息、访问日历时,需要向用户申请授权。具体示例代码如下:
...
...
zh-cn/application-dev/ability/stage-call.md
浏览文件 @
3058ec50
...
@@ -134,15 +134,14 @@ context.startAbilityByCall({
...
@@ -134,15 +134,14 @@ context.startAbilityByCall({
console
.
error
(
TAG
+
'
get caller failed with
'
+
error
)
console
.
error
(
TAG
+
'
get caller failed with
'
+
error
)
})
})
```
```
在跨设备场景下,需指定对端设备deviceId,具体获取接口参照
[
DeviceManager
](
https://gitee.com/openharmony/device_manager/blob/master/README_zh.md
)
。应用开发者
在跨设备场景下,需指定对端设备deviceId。应用开发者 根据实际需要做相应处理。具体示例代码如下:
根据实际需要做相应处理。具体示例代码如下:
```
ts
```
ts
let
TAG
=
'
[MainAbility]
'
let
TAG
=
'
[MainAbility]
'
var
caller
=
undefined
var
caller
=
undefined
let
context
=
this
.
context
let
context
=
this
.
context
context
.
startAbilityByCall
({
context
.
startAbilityByCall
({
deviceId
:
"
remoteDeviceId
"
,
deviceId
:
getRemoteDeviceId
()
,
bundleName
:
'
com.samples.CallApplication
'
,
bundleName
:
'
com.samples.CallApplication
'
,
abilityName
:
'
CalleeAbility
'
abilityName
:
'
CalleeAbility
'
}).
then
((
data
)
=>
{
}).
then
((
data
)
=>
{
...
@@ -159,7 +158,25 @@ context.startAbilityByCall({
...
@@ -159,7 +158,25 @@ context.startAbilityByCall({
console
.
error
(
TAG
+
'
get remote caller failed with
'
+
error
)
console
.
error
(
TAG
+
'
get remote caller failed with
'
+
error
)
})
})
```
```
在跨设备场景下,需要向用户申请数据同步的权限。具体示例代码如下:
从DeviceManager获取指定设备的deviceId,具体示例代码如下:
```
ts
import
deviceManager
from
'
@ohos.distributedHardware.deviceManager
'
;
var
dmClass
;
function
getRemoteDeviceId
()
{
if
(
typeof
dmClass
===
'
object
'
&&
dmClass
!=
null
)
{
var
list
=
dmClass
.
getTrustedDeviceListSync
();
if
(
typeof
(
list
)
==
'
undefined
'
||
typeof
(
list
.
length
)
==
'
undefined
'
)
{
console
.
log
(
"
MainAbility onButtonClick getRemoteDeviceId err: list is null
"
);
return
;
}
console
.
log
(
"
MainAbility onButtonClick getRemoteDeviceId success:
"
+
list
[
0
].
deviceId
);
return
list
[
0
].
deviceId
;
}
else
{
console
.
log
(
"
MainAbility onButtonClick getRemoteDeviceId err: dmClass is null
"
);
}
}
```
在跨设备场景下,需要向用户申请数据同步的权限。具体示例代码如下:
```
ts
```
ts
let
context
=
this
.
context
let
context
=
this
.
context
let
permissions
=
ohos
.
permission
.
DISTRIBUTED_DATASYNC
let
permissions
=
ohos
.
permission
.
DISTRIBUTED_DATASYNC
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录