搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
Hello HarmonyOS!——鸿蒙应用开发从入门到精通(博文视点出品)
0.00     定价 ¥ 139.00
图书来源: 浙江图书馆(由JD配书)
此书还可采购15本,持证读者免费借回家
  • 配送范围:
    浙江省内
  • ISBN:
    9787121428685
  • 作      者:
    孙洋
  • 出 版 社 :
    电子工业出版社
  • 出版日期:
    2022-02-01
收藏
编辑推荐

1.本书内容丰富,针对HarmonyOS 2.0,全面地介绍了鸿蒙2.0应用开发所涉及的知识点,使用概念介绍、代码编写、代码讲解的模式,将所讲的内容通过小案例用由浅入深、分步拆解的方式进行介绍,可以给你更好的学习体验。

2.作者权威,作者是华为认证的HarmonyOS系统课程开发者、华为开发者专家


展开
作者简介

孙洋,华为开发者专家(HDE),华为认证的HarmonyOS系统课程开发者,华为开发者学堂认证讲师,51CTO HarmonyOS技术社区MVP,CSDN博客专家,中国农业银行总行前研发工程师


展开
精彩书摘

4.4 跨设备启动服务

在HarmonyOS中,所有的功能都被抽象成Ability,服务被称作Service Ability,它不包含与用户进行交互的页面。比如,音乐播放器可以在退回到桌面后,依然播放音乐,这其实就是一种没有页面的服务。依托于HarmonyOS的分布式通信能力,开发者可以完成跨设备的服务启动,以便控制其他设备上的服务。首先来看一种最简单的使用方式:跨设备启动Service Ability。

跨设备启动服务和跨设备启动应用其实非常类似,需要申请ohos.permission.DISTRIBUTED_DATASYNC权限。当然,如果你需要查询网络中的分布式设备信息,那么还需要ohos.permission.GET_DISTRIBUTED_ DEVICE_INFO权限。

接下来完成一个跨设备启动Service Ability的案例。要完成这个案例,就需要以下几个步骤。

图4-14    创建SimpleServiceAbility

(1)权限配置。同4.2.2节的权限配置。

(2)通过DevEco Studio创建Service Ability,命名为SimpleServiceAbility,如图4-14所示。

(3)在ability_main.xml布局文件中新增一个按钮。

 

 

 

 

<?xml version="1.0" encoding="utf-8"?>

<DirectionalLayout

    xmlns:ohos="http://schemas.huawei.com/res/ohos"

    ohos:height="match_parent"

    ohos:width="match_parent"

    ohos:orientation="vertical">  

    ......

    <Button

        ohos:id="$+id:start_service"

        ohos:height="match_content"

        ohos:width="match_parent"

        ohos:text="启动远程服务"

        ohos:top_margin="5vp"

        ohos:background_element="#E1E1E1"

        ohos:text_size="30fp"/>

</DirectionalLayout>

 

(4)在MainAbilitySlice中定义它的点击事件。

 

Button startService = (Button)findComponentById(ResourceTable.Id_ start_service);

startService.setClickedListener(new Component.ClickedListener() {

    @Override

    public void onClick(Component component) {

        Intent intent = new Intent();

        //配置Intent参数

        Operation operation = new Intent.OperationBuilder()

            .withDeviceId(deviceList.get(0).getDeviceId())

            .withBundleName(getBundleName())

            .withAbilityName(SimpleServiceAbility.class.getName())

            .withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE).build();

         intent.setOperation(operation);

         intent.setParam("data","这是远程服务传来的消息!");

         startAbility(intent);

    }

});

 

这里的代码其实与远程启动FA是一样的,并没有区别。在上述代码中使用了deviceList.get(0).getDeviceId()方法获取设备ID,deviceList通过以下方式来获取。

 

List<DeviceInfo> deviceList = DeviceManager.getDeviceList (DeviceInfo.FLAG_GET_ONLINE_DEVICE);

 

由于Service Ability是没有页面的,为了方便看到效果,在Intent对象中传递了一个字符串。当启动远程服务后,开发者可以获取这个字符串,并给出提示,这样就能看出启动远程服务的效果。具体操作是在SimpleServicAbility的onCommand()方法中获取这个字符串,使用ToastDialog组件给出提示。

Ability为开发者提供了startAbility()方法来启动另一个Ability。由于不管是Feature Ability,还是Service Ability,都属于Ability的一种,所以也可以使用startAbility()方法来启动一个Service Ability。如果远程启动设备的Ability,那么只需要通过Operation对象的withDeviceId()方法来指定要启动的是哪一台设备上的Service Ability即可。

(5)重写SimpleServiceAbilty中的onCommand()方法。获取传递过来的字符串,并进行提示。

 

@Override

protected void onCommand(Intent intent, boolean restart, int startId) {

    super.onCommand(intent, restart, startId);

    String sdata = intent.getStringParam("data");

    new ToastDialog(ctx).setText(sdata).show();

}

 

到这里,所有的代码都准备完成了,接下来将程序运行到模拟器上观察效果。首先获取分布式设备的信息,然后点击“启动远程服务”按钮,可以看到右侧设备已经弹出了消息提示,说明启动远程服务成功,如图4-15所示。

 

                       (a)                                           (b)

图4-15  启动远程服务

这个时候,将右侧设备返回到桌面(将程序切换到后台),再次点击“启动远程服务”按钮,也是可以接收到消息的,如图4-16所示。

图4-16  后台运行的服务

这就是启动远程服务的例子,接下来介绍连接服务。它可以让多个设备之间建立一条通路,通过这条通路,可以实现以低延时在不同设备间进行数据交换。



展开
目录

第1章 HarmonyOS开篇 | 1

1.1 HarmonyOS概述 | 1

1.1.1 HarmonyOS技术特性 | 2

1.1.2 HarmonyOS架构 | 5

1.2 HarmonyOS环境搭建 | 7

1.2.1 DevEco Studio安装 | 7

1.2.2 SDK安装 | 10

1.2.3 HDC工具配置 | 17

1.2.4 账号注册与实名认证 | 21

1.3 HarmonyOS应用程序知识 | 25

1.3.1 App与HAP | 25

1.3.2 Ability概述 | 27

1.4 第一个程序:Hello World! | 27

1.4.1 创建项目 | 28

1.4.2 项目目录 | 31

1.4.3 配置文件 | 34

1.4.4 模拟器运行 | 36

1.4.5 应用签名与真机运行 | 45

1.4.6 自动签名 | 56

1.4.7 应用程序的断点调试 | 58

1.4.8 HiLog日志 | 63

1.5 本章小结 | 68

第2章 HarmonyOS页面开发 | 69

2.1 组件与组件容器 | 69

2.1.1 Component | 69

2.1.2 ComponentContainer | 70

2.1.3 开发用户页面的方式 | 71

2.1.4 边距 | 72

2.2 常用布局 | 76

2.2.1 DirectionalLayout | 76

2.2.2 DependentLayout | 89

2.2.3 StackLayout | 95

2.2.4 TableLayout | 98

2.2.5 PositionLayout | 105

2.2.6 AdaptiveBoxLayout | 106

2.3 常用组件 | 109

2.3.1 Component | 109

2.3.2 Text和TextField | 112

2.3.3 Button | 118

2.3.4 RadioButton和RadioContainer | 121

2.3.5 Checkbox | 129

2.3.6 Image | 131

2.3.7 ProgressBar和RoundProgressBar | 135

2.3.8 ToastDialog | 140

2.4 常用的资源类型 | 143

2.4.1 资源目录 | 143

2.4.2 资源文件的使用 | 144

2.4.3 限定词目录 | 153

2.4.4 样式与样式选择 | 155

2.5 动画开发 | 160

2.5.1 帧动画 | 160

2.5.2 数值动画 | 163

2.5.3 属性动画 | 168

2.6 组件的事件监听 | 171

2.6.1 事件类别 | 171

2.6.2 事件监听的五种写法 | 174

2.7 本章小结 | 180

第3章 Ability开发 | 181

3.1 Ability概述 | 181

3.2 Page Ability | 182

3.2.1 Page Ability的创建 | 183

3.2.2 Page Ability的生命周期 | 188

3.2.3 Page Ability的导航 | 191

3.3 Service Ability | 203

3.3.1 Service Ability的创建 | 203

3.3.2 Service Ability的生命周期 | 206

3.4 Ability属性配置 | 215

3.4.1 Ability的配置文件 | 215

3.4.2 Ability的启动模式 | 218

3.5 Intent | 220

3.5.1 Intent对象的结构 | 220

3.5.2 Intent对象的操作 | 221

3.6 本章小结 | 222

第4章 分布式通信 | 224

4.1 远程启动FA | 224

4.1.1 获取远程设备的信息 | 225

4.1.2 启动FA | 231

4.2 应用迁移 | 236

4.2.1 IAbilityContinuation接口 | 236

4.2.2 应用迁移案例 | 239

4.2.3 IAbilityContinuation接口的其他回调方法 | 243

4.3 应用回迁 | 246

4.4 跨设备启动服务 | 248

4.5 跨设备连接服务 | 252

4.6 跨设备服务调用 | 256

4.7 本章小结 | 264

第5章 数据管理 | 265

5.1 本地数据管理 | 265

5.1.1 关系型数据库与SQLite | 265

5.1.2 关系型数据库的操作 | 268

5.1.3 对象关系映射数据库 | 282

5.1.4 Preferences | 298

5.2 分布式数据管理 | 309

5.2.1 分布式数据服务 | 309

5.2.2 分布式数据服务开发 | 311

5.3 分布式文件服务 | 325

5.3.1 分布式文件服务概述 | 325

5.3.2 分布式文件服务开发 | 326

5.4 Data Ability | 333

5.4.1 Data Ability概述 | 333

5.4.2 Data Ability的创建 | 334

5.4.3 Data Ability的文件访问 | 338

5.4.4 Data Ability的数据库访问 | 345

5.5 本章小节 | 355

第6章 公共事件和通知 | 356

6.1 公共事件 | 357

6.1.1 公共事件发布 | 357

6.1.2 事件订阅 | 364

6.1.3 公共事件退订 | 369

6.2 通知 | 370

6.3 IntentAgent | 382

6.3.1 IntentAgent概述 | 382

6.3.2 IntentAgent开发 | 383

6.4 本章小结 | 390

第7章 服务卡片与原子化服务 | 391

7.1 卡片 | 391

7.1.1 创建卡片 | 394

7.1.2 卡片的开发 | 400

7.2 原子化服务 | 417

7.2.1 原子化服务概述 | 417

7.2.2 原子化服务开发 | 418

7.3 本章小结 | 422

第8章 高级编程 | 423

8.1 ListContainer | 423

8.1.1 ListContainer的使用 | 423

8.1.2 ListContainer的事件方法 | 430

8.2 ScrollView | 432

8.2.1 ScrollView的使用 | 432

8.2.2 ScrollView的事件方法 | 436

8.3 PageSlider与PageSliderIndicator | 439

8.3.1 PageSlider的使用 | 439

8.3.2 PageSlider的方法 | 445

8.3.3 PageSliderIndicator的使用 | 448

8.3.4 PageSliderIndicator的事件方法 | 454

8.4 WebView | 456

8.4.1 WebView的使用 | 456

8.4.2 WebView的事件方法 | 458

8.5 Fraction | 471

8.5.1 Fraction概述 | 471

8.5.2 Fraction的使用 | 473

8.6 本章小结 | 482

第9章 线程管理 | 483

9.1 线程管理开发 | 483

9.1.1 线程优先级 | 484

9.1.2 TaskDispatcher开发 | 484

9.2 线程间通信 | 497

9.2.1 EventHandler运行机制 | 498

9.2.2 线程间通信相关的对象 | 499

9.2.3 线程间通信开发 | 502

9.3 本章小结 | 510

 


展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证