> 文档中心 > 记录一下HarmonyOS开发app时跳转Ability(withAction方法)无反应的问题

记录一下HarmonyOS开发app时跳转Ability(withAction方法)无反应的问题

目录

  • 解决方案
  • 环境
  • 问题展示
  • 代码展示
    • Ability
      • MainAbility
      • PayAbility
    • AbilitySlice
      • MainAbilitySlice
      • PayAbilitySlice
      • Pay2AbilitySlice
    • Resources/layout
      • ability_main
      • ability_pay
      • ability_pay2
    • config.json
  • 目录结构
  • 解决后展示

解决方案

    换设备,找一台能跳转的设备。具体原因还不知道。
    代码写的不一定规范,且不说更新的问题,这个只是在测试跳转。

环境

    DevEco Studio 3.0.0.993 Release
    SDK 6(使用java)

问题展示

图1

代码展示

Ability

MainAbility

package com.openvally.cyj;import com.openvally.cyj.slice.MainAbilitySlice;import ohos.aafwk.ability.Ability;import ohos.aafwk.content.Intent;import ohos.hiviewdfx.HiLog;import ohos.hiviewdfx.HiLogLabel;public class MainAbility extends Ability {    @Override    public void onStart(Intent intent) { super.onStart(intent); super.setMainRoute(MainAbilitySlice.class.getName());    }}

PayAbility

package com.openvally.cyj;import com.openvally.cyj.slice.Pay2AbilitySlice;import com.openvally.cyj.slice.PayAbilitySlice;import ohos.aafwk.ability.Ability;import ohos.aafwk.content.Intent;import ohos.hiviewdfx.HiLog;import ohos.hiviewdfx.HiLogLabel;public class PayAbility extends Ability {    @Override    public void onStart(Intent intent) { super.onStart(intent); super.setMainRoute(PayAbilitySlice.class.getName()); addActionRoute();    }    //添加路由    private void addActionRoute(){ addActionRoute("action.pay2", Pay2AbilitySlice.class.getName());    }}

AbilitySlice

MainAbilitySlice

package com.openvally.cyj.slice;import com.openvally.cyj.PayAbility;import com.openvally.cyj.ResourceTable;import ohos.aafwk.ability.AbilitySlice;import ohos.aafwk.content.Intent;import ohos.aafwk.content.Operation;import ohos.agp.components.Component;import ohos.agp.components.Text;import ohos.agp.utils.LayoutAlignment;import ohos.agp.window.dialog.ToastDialog;import ohos.utils.IntentConstants;public class MainAbilitySlice extends AbilitySlice {    @Override    public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_ability_main); toPayAbility(); toPay2Ability(); toDialPage();    }    //跳转到payAbility    private void toPayAbility(){ Text text_to_payAbility = (Text)findComponentById(ResourceTable.Id_text_to_payAbility); text_to_payAbility.setClickedListener(listen -> {     new ToastDialog(getContext())      .setText("test1")      .setAlignment(LayoutAlignment.CENTER)      .show();     Intent intentSend = new Intent();     Operation operation = new Intent.OperationBuilder()      .withDeviceId("")      .withBundleName(getBundleName())      .withAbilityName(PayAbility.class.getName())      .build();     intentSend.setOperation(operation);     startAbility(intentSend); });    }    //跳转到pay2Ability    private void toPay2Ability() { Text text_to_pay2Ability = (Text) findComponentById(ResourceTable.Id_text_to_pay2Ability); text_to_pay2Ability.setClickedListener(listen ->{  new ToastDialog(getContext())   .setText("test2")   .setAlignment(LayoutAlignment.CENTER)   .show();  Intent intentSend = new Intent();  Operation operation = new Intent.OperationBuilder()   .withAction("action.pay2")   .build();  intentSend.setOperation(operation);  startAbility(intentSend);     }); }    //跳转到拨号页面    private void toDialPage() { Text text_to_pay2Ability = (Text) findComponentById(ResourceTable.Id_text_to_dialPage); text_to_pay2Ability.setClickedListener(listen ->{     new ToastDialog(getContext())      .setText("test3")      .setAlignment(LayoutAlignment.CENTER)      .show();     Intent intentSend = new Intent();     Operation operation = new Intent.OperationBuilder()      .withAction(IntentConstants.ACTION_DIAL)      .build();     intentSend.setOperation(operation);     startAbility(intentSend); });    }    @Override    public void onActive() { super.onActive();    }    @Override    public void onForeground(Intent intent) { super.onForeground(intent);    }}

PayAbilitySlice

package com.openvally.cyj.slice;import com.openvally.cyj.PayAbility;import com.openvally.cyj.ResourceTable;import ohos.aafwk.ability.AbilitySlice;import ohos.aafwk.content.Intent;import ohos.hiviewdfx.HiLog;import ohos.hiviewdfx.HiLogLabel;public class PayAbilitySlice extends AbilitySlice {    @Override    public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_ability_pay);    }    @Override    public void onActive() { super.onActive();    }    @Override    public void onForeground(Intent intent) { super.onForeground(intent);    }}

Pay2AbilitySlice

package com.openvally.cyj.slice;import com.openvally.cyj.ResourceTable;import ohos.aafwk.ability.AbilitySlice;import ohos.aafwk.content.Intent;public class Pay2AbilitySlice extends AbilitySlice {    @Override    public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_ability_pay2);    }    @Override    public void onActive() { super.onActive();    }    @Override    public void onForeground(Intent intent) { super.onForeground(intent);    }}

Resources/layout

ability_main

<DirectionalLayout    xmlns:ohos="http://schemas.huawei.com/res/ohos"    ohos:height="match_parent"    ohos:width="match_parent"    ohos:alignment="center"    ohos:orientation="vertical">    <Text ohos:id="$+id:text_to_payAbility" ohos:height="match_content" ohos:width="match_content" ohos:layout_alignment="horizontal_center" ohos:text="精确跳转到PayAbility" ohos:text_size="30vp" />    <Text ohos:id="$+id:text_to_pay2Ability" ohos:height="match_content" ohos:width="match_content" ohos:layout_alignment="horizontal_center" ohos:text="模糊跳转到Pay2Ability" ohos:text_size="30vp" />    <Text ohos:id="$+id:text_to_dialPage" ohos:height="match_content" ohos:width="match_content" ohos:layout_alignment="horizontal_center" ohos:text="跳转到DialPage" ohos:text_size="30vp" /></DirectionalLayout>

ability_pay

<DirectionalLayout    xmlns:ohos="http://schemas.huawei.com/res/ohos"    ohos:height="match_parent"    ohos:width="match_parent"    ohos:alignment="center"    ohos:orientation="vertical">    <Text ohos:id="$+id:text_payAbility" ohos:height="match_content" ohos:width="match_content" ohos:layout_alignment="horizontal_center" ohos:text="This is PayAbility" ohos:text_size="30vp" /></DirectionalLayout>

ability_pay2

<DirectionalLayout    xmlns:ohos="http://schemas.huawei.com/res/ohos"    ohos:height="match_parent"    ohos:width="match_parent"    ohos:alignment="center"    ohos:orientation="vertical">    <Text ohos:id="$+id:text_payAbility" ohos:height="match_content" ohos:width="match_content" ohos:layout_alignment="horizontal_center" ohos:text="This is Pay2Ability" ohos:text_size="30vp" /></DirectionalLayout>

config.json

{  "app": {    "bundleName": "com.openvally.cyj",    "vendor": "example",    "version": {      "code": 1000000,      "name": "1.0.0"    }  },  "deviceConfig": {  },  "module": {    "package": "com.openvally.cyj",    "name": ".MyApplication",    "mainAbility": "com.openvally.cyj.MainAbility",    "deviceType": [      "phone",      "tablet"    ],    "distro": {      "deliveryWithInstall": true,      "moduleName": "entry",      "moduleType": "entry",      "installationFree": false    },    "abilities": [      { "skills": [   {     "entities": ["entity.system.home"     ],     "actions": ["action.system.home"     ]   } ], "name": "com.openvally.cyj.MainAbility", "description": "$string:mainability_description", "icon": "$media:icon", "label": "$string:entry_MainAbility", "launchType": "standard", "orientation": "unspecified", "visible": true, "type": "page"      },      { "skills": [   {     "actions": ["action.pay2"     ]   } ], "name": "com.openvally.cyj.PayAbility", "description": "$string:payability_description", "icon": "$media:icon", "label": "$string:entry_PayAbility", "launchType": "standard", "orientation": "unspecified", "visible": true, "type": "page"      }    ]  }}

目录结构

图2

解决后展示

图3