diff --git "a/HarmonyOS\345\272\224\347\224\250\345\274\200\345\217\221-\345\272\224\347\224\250\345\201\217\345\245\275\346\225\260\346\215\256\350\257\273\345\206\231.md" "b/HarmonyOS\345\272\224\347\224\250\345\274\200\345\217\221-\345\272\224\347\224\250\345\201\217\345\245\275\346\225\260\346\215\256\350\257\273\345\206\231.md" new file mode 100644 index 0000000000000000000000000000000000000000..2723a17fe0f625832d6653cbe9748c1a658c3c0d --- /dev/null +++ "b/HarmonyOS\345\272\224\347\224\250\345\274\200\345\217\221-\345\272\224\347\224\250\345\201\217\345\245\275\346\225\260\346\215\256\350\257\273\345\206\231.md" @@ -0,0 +1,260 @@ +# 一、介绍 +**本篇将实现的内容** +HarmonyOS是面向全场景多终端的分布式操作系统,使得应用程序的开发打破了智能终端互通的性能和数据壁垒,业务逻辑原子化开发,适配多端。通过一个简单应用开发,体验HarmonyOS的轻量级偏好数据库能力 + +**您将建立什么** +在这个Codelab中,你将创建Demo Project,并将Demo编译成Hap,此示例应用程序展示了如何使用轻量级偏好数据库。 + +**您将会学到什么** +1. 如何创建一个HarmonyOS Demo Project +2. 如何构建一个Hap并且将其部署到智慧屏真机 +3. 通过此示例应用体验如何使用轻量级偏好数据库 + + + +# 二、您需要什么 +## 1. 硬件要求 + + + + 1. 操作系统:Windows10 64位 + 2. 内存:8G及以上 + 3. 硬盘:100G及以上 + 4. 分辨率:1280*800及以上 + +## 2. 软件要求 + + 1. DevEco Studio:需手动下载安装,详细步骤请参考《DevEco Studio使用指南》2.1.2 + 2. JDK:DevEco Studio自动安装。. + 3. Node.js:请手动下载安装,详细步骤请参考《DevEco Studio使用指南》2.1.3 下载和安装Node.js + 4. HarmonyOS SDK:待DevEco Studio安装完成后,利用DevEco Studio来加载HarmonyOS SDK。详细步骤请参考《DevEco Studio使用指南》2.1.6 加载HarmonyOS SDK。 + 5. Maven库依赖包:如需手动拷贝和配置,详细步骤请参考《DevEco Studio使用指南》2.3 离线方式配置Maven库。 + + + +## 3. 需要的知识点 +Java基础开发能力。 + +# 三、能力接入准备 + +实现HarmonyOS应用开发,需要完成以下准备工作: +1. 环境准备。 +2. 环境搭建。 +3. 创建项目 +4. 申请调试证书 +5. 应用开发 + +具体操作,请按照《DevEco Studio使用指南》中详细说明来完成。 +**提示:需要通过注册成开发者才能完成集成准备中的操作。** + +# 四、代码片段 +## 1. 布局: + + - 代码布局: +```go +LayoutConfig config = new LayoutConfig(LayoutConfig.MATCH_PARENT, LayoutConfig.MATCH_PARENT); +myLayout.setLayoutConfig(config); +myLayout.setOrientation(Component.VERTICAL); +ShapeElement element = new ShapeElement(); +element.setRgbColor(new RgbColor(255, 255, 255)); +myLayout.setBackground(element); +log = createText("日志信息"); +myLayout.addComponent(log); +writeBtn = createBtn("写入preferences数据", new RgbColor(0, 0, 255), 1002); +readBtn = createBtn("读取preferences数据", new RgbColor(0, 0, 255), 1003); +addObserver = createBtn("注册观察者", new RgbColor(255, 0, 0), 1004); +``` + +```go +private Text createText(String title) { +Text text = new Text(this); +DirectionalLayout.LayoutConfig config = new DirectionalLayout.LayoutConfig(DirectionalLayout.LayoutConfig.MATCH_CONTENT, DirectionalLayout.LayoutConfig.MATCH_CONTENT); +text.setLayoutConfig(config); +text.setText(title); +text.setTextSize(48); +text.setTextColor(new Color(0xFF0000FF)); +return text; +} +``` +```go +private Button createBtn(String title, RgbColor color, int id) { +Button btn = new Button(this); +LayoutConfig configBtn = new LayoutConfig(500, 100); +configBtn.topMargin = 30; +btn.setLayoutConfig(configBtn); +btn.setText(title); +btn.setId(id); +btn.setTextSize(48); +btn.setTextColor(new Color(0xFFFFFFFF)); +ShapeElement elementBtn = new ShapeElement(); +elementBtn.setRgbColor(color); +elementBtn.setCornerRadius(12); +btn.setBackground(elementBtn); +myLayout.addComponent(btn); +return btn; +} +``` + + - Preferences使用 + +Preferences初始化: +```go +private void initPreferences() { +DatabaseHelper databaseHelper = new DatabaseHelper(this); +String fileName = "user_info"; +preferences = databaseHelper.getPreferences(fileName); +} +``` +写文件: +```go +preferences.putInt("age", Integer.parseInt(age.getText())); +preferences.putString("name", name.getText()); +preferences.flushSync(); +``` + +读文件: +```go +int age = preferences.getInt("age", 0); +String name = preferences.getString("name", ""); +ToastDialog toastDialog = new ToastDialog(PreferencesAbilitySlice.this); +toastDialog.setText("read user data frome preferences name:" + name + ", age:" + age); +toastDialog.show(); +``` + +观察者: + +注册: + +```go +counter = new PreferencesChangeCounter(); +preferences.registerObserver(counter); +``` + +```go +private class PreferencesChangeCounter implements Preferences.PreferencesObserver { + @Override + public void onChange(Preferences preferences, String key) { + if ("name".equals(key)) { + String name = preferences.getString("name", ""); + log.setText("user data name is edit:" + name); + } + if ("age".equals(key)) { + int age = preferences.getInt("age", 0); + log.setText("user data age is edit:" + age); + } + } +} +``` +删除: +```go +preferences.unregisterObserver(counter); +``` + +## 2. 响应遥控器点击: +```go +private void addFocusChangedListener(Component view) { + view.setFocusChangedListener(new Component.FocusChangedListener() { + @Override + public void onFocusChange(Component component, boolean b) { + ShapeElement shapeElement = (ShapeElement) view.getBackgroundElement(); + if (b) { + shapeElement.setStroke(10, new RgbColor(0, 0, 0)); + focusView = view; + } else { + shapeElement.setStroke(0, new RgbColor(0, 0, 0)); + } + } + }); +} + +@Override +public boolean onKeyUp(int keyCode, KeyEvent keyEvent) { + switch (keyCode) { + case KeyEvent.KEY_DPAD_CENTER: + case KeyEvent.KEY_ENTER: + if(focusView == writeBtn) { + + preferences.putInt("age", index++); + preferences.putString("name", "张三"); + preferences.flushSync(); + } + if(focusView == readBtn) { + int age = preferences.getInt("age", 0); + String name = preferences.getString("name", ""); + log.setText("read user data frome preferences name:" + name + ", age:" + age); + } + if(focusView == addObserver) { + if (addObserver.getText().equals("注册观察者")) { + addObserver.setText("删除观察者"); + // 向preferences实例注册观察者 + counter = new PreferencesChangeCounter(); + preferences.registerObserver(counter); + + } else { + addObserver.setText("注册观察者"); + // 向preferences实例注销观察者 + preferences.unregisterObserver(counter); + } + } + return true; + case KeyEvent.KEY_DPAD_UP: + int position = views.indexOf(focusView.getId()); + if (position > 0) { + switch (position) { + case 1: + writeBtn.requestFocus(); + break; + case 2: + readBtn.requestFocus(); + break; + default: + break; + } + } + return true; + case KeyEvent.KEY_DPAD_DOWN: + position = views.indexOf(focusView.getId()); + if (position < 3) { + switch (position) { + case 0: + readBtn.requestFocus(); + break; + case 1: + addObserver.requestFocus(); + break; + default: + break; + } + } + return true; + } + return false; +} +``` +## 3. 编译运行该应用 + +通过hdc连接大屏设备 + +先查看智慧屏IP: + +```go +大屏设置->"网络与连接"->"网络"->"有线网络" +``` +在cmd或者IDE的Terminal输入命令: + +```go +hdc tconn 192.168.3.9:5555 +``` +运行hap +![在这里插入图片描述](https://img-blog.csdnimg.cn/20200908111542995.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center) + +# 五、恭喜你 + +干得好,你已经成功完成了HarmonyOS应用开发E2E体验,学到了: + + 1. 如何创建一个HarmonyOS Demo Project + 2. 如何构建一个Hap并且将其部署到真机上在HarmonyOS上如何使用 + 3. HarmonyOS的轻量级偏好数据库 + + +[【如果您想学习HarmonyOS 应用开发基础教程 请猛戳】](https://codechina.csdn.net/huawei/harmonyos/HarmonyOS-Guide) \ No newline at end of file