Operation
根據(jù)Operation的其他屬性啟動(dòng)應(yīng)用
有些場(chǎng)景下,開發(fā)者需要在應(yīng)用中使用其他應(yīng)用提供的某種能力,而不感知提供該能力的具體是哪一個(gè)應(yīng)用。例如開發(fā)者需要通過(guò)瀏覽器打開一個(gè)鏈接,而不關(guān)心用戶最終選擇哪一個(gè)瀏覽器應(yīng)用,則可以通過(guò)Operation的其他屬性(除BundleName與AbilityName之外的屬性)描述需要的能力。如果設(shè)備上存在多個(gè)應(yīng)用提供同種能力,系統(tǒng)則彈出候選列表,由用戶選擇由哪個(gè)應(yīng)用處理請(qǐng)求。以下示例展示使用Intent跨Ability查詢天氣信息。
請(qǐng)求方
在Ability中構(gòu)造Intent以及包含Action的Operation對(duì)象,并調(diào)用startAbilityForResult()方法發(fā)起請(qǐng)求。然后重寫onAbilityResult()回調(diào)方法,對(duì)請(qǐng)求結(jié)果進(jìn)行
private void queryWeather() {
Intent intent = new Intent();
Operation operation = new Intent.OperationBuilder()
.withAction(Intent.ACTION_QUERY_WEATHER)
.build();
intent.setOperation(operation);
startAbilityForResult(intent, REQ_CODE_QUERY_WEATHER);
}
@Override
protected void onAbilityResult(int requestCode, int resultCode, Intent resultData) {
switch (requestCode) {
case REQ_CODE_QUERY_WEATHER:
// Do something with result.
...
return;
default:
...
}
}
處理方
作為處理請(qǐng)求的對(duì)象,首先需要在配置文件中聲明對(duì)外提供的能力,以便系統(tǒng)據(jù)此找到自身并作為候選的請(qǐng)求處理者。
{
"module": {
...
"abilities": [
{
...
"skills":[
{
"actions":[
"ability.intent.QUERY_WEATHER"
]
}
]
...
}
]
...
}
...
}
在Ability中配置路由以便支持以此action導(dǎo)航到對(duì)應(yīng)的AbilitySlice。
@Override
protected void onStart(Intent intent) {
...
addActionRoute(Intent.ACTION_QUERY_WEATHER, DemoSlice.class.getName());
...
}
在Ability中處理請(qǐng)求,并調(diào)用setResult()方法暫存返回結(jié)果。
@Override
protected void onActive() {
...
Intent resultIntent = new Intent();
setResult(0, resultIntent);
...
}