HarmonyOS鸿蒙Next中跳转到系统应用拨号盘

HarmonyOS鸿蒙Next中跳转到系统应用拨号盘

Intent是对象之间传递信息的载体。例如,当一个Ability需要启动另一个Ability时,或者一个AbilitySlice需要导航到另一个AbilitySlice时,可以通过Intent指定启动的目标同时携带相关数据。

本节演示,如何通过设置Intent,来从当前应用跳转到系统应用——拨号盘。

创建应用

创建名为IntentOperationWithActionDial的应用。

修改MainAbilitySlice

修改MainAbilitySlice代码如下:

package com.waylau.hmos.intentoperationwithactiondial.slice;

import com.waylau.hmos.intentoperationwithactiondial.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.aafwk.content.Operation;
import ohos.agp.components.Text;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;
import ohos.utils.IntentConstants;

public class MainAbilitySlice extends AbilitySlice {
    private static final String TAG = MainAbilitySlice.class.getSimpleName();
    private static final HiLogLabel LABEL_LOG =
        new HiLogLabel(HiLog.LOG_APP, 0x00001, TAG);

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);
        // 添加点击事件来触发请求
        Text text = (Text) findComponentById(ResourceTable.Id_text_helloworld);
        text.setClickedListener(listener -> this.doCall());
    }

    private void doCall() {
        HiLog.info(LABEL_LOG, "before doCall");
        Intent intent = new Intent();
        Operation operation = new Intent.OperationBuilder()
            .withAction(IntentConstants.ACTION_DIAL) // 系统应用拨号盘
            .build();
        intent.setOperation(operation);
        // 启动Ability
        startAbility(intent);
    }

    @Override
    public void onActive() {
        super.onActive();
    }

    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }
}

上述代码

  • 对默认生成的Id_text_helloworld文本设置点击事件,点击则会执行doCall方法。
  • doCall构建了Intent,该对象指明了withAction为系统应用拨号盘。拨号盘的Action常量值定义在IntentConstants.ACTION_DIAL中。
  • 使用startAbility方法来启动Ability。

运行

运行应用,界面显示如下。

点击“Hello World”本文,触发点击事件。

此时,界面切换到了系统应用拨号盘,如下。

设置参数

那么,能否在启动Ability的时候来设置参数呢?比如,启动拨号盘的时候设置拨号的号码。

可以将代码修改如下:

@Override
public void onStart(Intent intent) {
    super.onStart(intent);
    super.setUIContent(ResourceTable.Layout_ability_main);
    // 添加点击事件来触发请求
    Text text = (Text) findComponentById(ResourceTable.Id_text_helloworld);
    //text.setClickedListener(listener -> this.doCall());
    text.setClickedListener(listener -> this.doCall("18088888888")); // 显示拨号
}

private void doCall(String destinationNum) {
    HiLog.info(LABEL_LOG, "before doCall");
    Intent intent = new Intent();
    Operation operation = new Intent.OperationBuilder()
        .withAction(IntentConstants.ACTION_DIAL) // 系统应用拨号盘
        .withUri(Uri.parse("tel:" + destinationNum)) // 设置号码
        .build();
    intent.setOperation(operation);
    // 启动Ability
    startAbility(intent);
}

在Operation通过withUri来传递电话号码。再次运行应用,可以见界面效果如下。

启动应用报错的解决

可能遇得到如下错误。

该报错是IDE与SDK版本不匹配的问题。

解决方式两种。

升级到最新的DevEco Studio

新版的DevEco Studio应该是修复了该问题。

修改配置

或者是修改配置也可以解决。

原有应用配置信息如下:

将上述配置中的releaseType这项配置删除即可。

源码

上述示例源码,可以在https://github.com/waylau/harmonyos-tutorial仓库IntentOperationWithActionDial示例中找到。


更多关于HarmonyOS鸿蒙Next中跳转到系统应用拨号盘的实战教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

请问可以跳转到浏览器吗,应该怎么设置

更多关于HarmonyOS鸿蒙Next中跳转到系统应用拨号盘的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


不错的文章,受益匪浅。

多谢支持,还望继续关注后续更新!

已实践,感谢楼主的学习分享

多谢支持,还望继续关注后续更新!

正好这几天看到有人问,楼主就出文了

哈哈~多谢支持~~~~~

在HarmonyOS鸿蒙Next中,可以通过Intent跳转到系统拨号盘。使用ACTION_DIAL动作,并传入电话号码作为Uri。示例代码如下:

Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:123456789"));
startActivity(intent);

这段代码会启动系统拨号盘,并显示指定的电话号码。用户确认后即可拨打电话。

回到顶部