【Codelabs挑战赛—定制消息和配置】HarmonyOS定制告白消息
1.效果如下所示:
2.项目介绍:
开发环境:DevEco Studio 3.0 Beta2 3.0.0.800 Empty Ability Template Java
通过此项目,主要是学习如何在HarmonyOS上集成远程配置、应用内消息、AppLinking链接、云存储和分析服务等技术。
3.项目结构:
4.在Gradle文件中设置AppGallery Connect的相关依赖和SDK包:
a) 设置项目级 build.gradle:
apply plugin: 'com.huawei.ohos.app' buildscript { repositories { maven { url 'https://repo.huaweicloud.com/repository/maven/' } maven { url 'https://developer.huawei.com/repo/' } } ... dependencies { classpath 'com.huawei.ohos:hap:3.0.5.2' classpath 'com.huawei.ohos:decctest:1.2.7.2' // 添加agconnect服务依赖 classpath 'com.huawei.agconnect:agcp-harmony:1.3.0.300' } } allprojects { repositories { maven { url 'https://repo.huaweicloud.com/repository/maven/' } maven { url 'https://developer.huawei.com/repo/' } } }
b) 设置模块级 build.gradle:
// Add the information to the bottom of the file. apply plugin: 'com.huawei.ohos.hap' apply plugin: 'com.huawei.agconnect' apply plugin: 'com.huawei.ohos.decctest' ... dependencies { implementation fileTree(dir: 'libs', include: ['*.jar', '*.har']) testImplementation 'junit:junit:4.13.1' ohosTestImplementation 'com.huawei.ohos.testkit:runner:2.0.0.200' // 添加分析服务依赖 implementation 'com.huawei.hms:hianalytics-harmony:6.3.2.301' // AGC基础SDK implementation 'com.huawei.agconnect:agconnect-core-harmony:1.3.0.300' // 调测设备AAID SDK implementation 'com.huawei.agconnect:agconnect-credential-harmony:1.3.0.300' // 集成应用内消息SDK implementation 'com.huawei.agconnect:agconnect-appmessaging-harmony:1.3.0.300' // 添加远程配置依赖 implementation 'com.huawei.agconnect:agconnect-remoteconfig-harmony:1.3.0.300' // 添加AppLinking SDK implementation 'com.huawei.agconnect:agconnect-applinking-harmony:1.3.0.300' }
5.云存储:
6.远程配置:
7.应用内消息:
8.App Linking:
9.添加配置文件:
在AGC管理平台打开“项目设置”,下载配置文件“agconnect-services.json”,将下载的JSON文件放到DevEco Studio 项目的应用级目录下:
10.分析服务:
由于应用集成了华为分析服务,完成相关配置后,打开应用,会弹出定制消息,此时会上报应用信息到AGC管理平台。
11.程序代码:
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:alignment="top" ohos:orientation="vertical"> <Image ohos:id="$+id:image" ohos:height="match_content" ohos:width="match_parent" ohos:image_src="$media:first" /> </DirectionalLayout>
MainAbility:
package com.example.codechallengesdemo; import com.example.codechallengesdemo.slice.MainAbilitySlice; import com.huawei.agconnect.AGConnectInstance; import com.huawei.hms.analytics.HiAnalytics; import com.huawei.hms.analytics.HiAnalyticsInstance; import com.huawei.hms.analytics.HiAnalyticsTools; import ohos.aafwk.ability.Ability; import ohos.aafwk.content.Intent; public class MainAbility extends Ability { @Override public void onStart(Intent intent) { super.onStart(intent); super.setMainRoute(MainAbilitySlice.class.getName()); // 初始化AGC SDK AGConnectInstance.initialize(getAbilityPackage()); // 打开SDK日志开关 HiAnalyticsTools.enableLog(); // 初始化hiAnalytics kit HiAnalyticsInstance instance = HiAnalytics.getInstance(this); } }
MainAbilitySlice:
package com.example.codechallengesdemo.slice; import com.example.codechallengesdemo.ResourceTable; import com.huawei.agconnect.appmessaging.AGConnectAppMessaging; import com.huawei.agconnect.appmessaging.AGConnectAppMessagingOnClickListener; import com.huawei.agconnect.appmessaging.model.Action; import com.huawei.agconnect.appmessaging.model.AppMessage; import com.huawei.agconnect.common.api.AGCInstanceID; import com.huawei.agconnect.remoteconfig.AGConnectConfig; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.agp.components.Image; import ohos.hiviewdfx.HiLog; import ohos.hiviewdfx.HiLogLabel; import ohos.media.audio.*; import ohos.media.codec.Codec; import ohos.media.common.BufferInfo; import ohos.media.common.Source; import java.nio.ByteBuffer; public class MainAbilitySlice extends AbilitySlice { private AGConnectAppMessaging appMessaging; private static final String TAG = MainAbilitySlice.class.getName(); private static final HiLogLabel LABEL_LOG = new HiLogLabel(3, 0xD000F00, TAG); private static final int SAMPLE_RATE = 44100; private static final int BUFFER_SIZE = 1024; private AudioRenderer audioRenderer; private Codec codec; long interval = 0; private String flag = "late"; @Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_ability_main); // 初始化音频播放相关参数 initAudioRenderer(); // 获取AAID getAAID(); //配置应用内消息 configAppMessage(); // 读取远程配置 readRemoteConfig(); }
安装应用后,打开应用程序,会播放音乐,更换应用内图片,同时弹出定制消息,点击按钮跳转到远程配置的链接。至此,HarmonyOS定制告白消息项目就结束了。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
揭秘华为云GaussDB(for Influx)最佳实践:hint查询
摘要:GaussDB(for Influx)通过提供hint功能,在单时间线的查询场景下,性能有大幅度的提升,能有效满足客户某些特定场景的查询需求。 本文分享自华为云社区《华为云GaussDB(for Influx)揭秘第十期:最佳实践之hint查询》,作者:高斯Influx官方博客。 “怎么感觉查询越来越慢了?”随着业务数据量的不断增大,很多客户都反馈同样的查询语句变得越来越慢。接到客户的反馈后,我们分析了客户的查询执行各个阶段的耗时,发现随着数据量的增加,耗在倒排索引阶段的时间越来越长,那么倒排索引到底是干什么用的呢?能不能跳过倒排索引呢? 倒排索引,顾名思义,是一种索引结构,该索引避免了多维查询时进行大量的数据扫描。其本身就是用于提高查询性能的,显然不能简单地跳过倒排索引。但是随着数据量的不断增大,确实引起了查询的时延变大。那么倒排索引的原理是什么?适合于哪种业务场景?有没有可能跳过倒排索引,来进一步降低查询时延呢?本文基于GaussDB(for Influx)的实现,给您一一解答上述问题。 1. 为什么要使用倒排索引? 用以下数据作为示例进行说明,其中 Tag:region,s...
- 下一篇
Fasty v1.0.2 发布,一个极快的 JavaScript 模板引擎
Fasty 一个极快的 JavaScript 模板引擎 Fasty 是一个简约、超快的 JavaScript 模板引擎, 它使用了非常独特的缓存技术,从而获得接近 JavaScript 极限的运行性能,并且同时支持 NodeJS 和浏览器。 Fasty 的渲染速度,超过很多市面上的 JavaScript 引擎 100 倍以上。 Fasty 特点 1、极高性能:Fasty 会直接把模板内容编译成 JavaScript 源码执行,而不是使用正则替换,因此,Fasty 的渲染性能超过很多其他模板引擎 100 倍或以上。 2、极度简单:Fasty 只内置了输出指令{{ }}和 逻辑指令{{~ }} 3、非常灵活:Fasty 直接与 JavaScript 打通,比如当我们引用 JQuery 之后,可以直接这样使用{{ $("#id").text() }} 使用方法 示例1 var template = '<div> hello {{ name }} </div>' var data = {name: "fasty"} var fasty = new Fasty...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2全家桶,快速入门学习开发网站教程
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- Windows10,CentOS7,CentOS8安装Nodejs环境