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
请问可以跳转到浏览器吗,应该怎么设置
更多关于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);
这段代码会启动系统拨号盘,并显示指定的电话号码。用户确认后即可拨打电话。