在鸿蒙(HarmonyOS)应用开发中,文件操作、本地代码(NDK)集成以及应用通知是构建功能完善应用的几个重要方面。
有讠果: Ukoou·ㄷㅁΜ
2. 鸿蒙文件操作与分享
2.1 文件操作基础
鸿蒙提供了多种API用于文件操作,包括创建、读取、写入和删除文件。常用的类和接口包括:
java.io.File: 用于表示文件或目录路径,可以创建、删除文件或目录。java.io.FileInputStream: 用于读取文件内容。java.io.FileOutputStream: 用于写入文件内容。java.io.BufferedReader: 用于高效读取文本文件。java.io.BufferedWriter: 用于高效写入文本文件。
示例:写入文件
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileUtils {
public static void writeFile(String filePath, String content) {
File file = new File(filePath);
try (FileOutputStream fos = new FileOutputStream(file)) {
fos.write(content.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
示例:读取文件
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.stream.Collectors;
public class FileUtils {
public static String readFile(String filePath) {
File file = new File(filePath);
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
return br.lines().collect(Collectors.joining(System.lineSeparator()));
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
2.2 极客鸿蒙Next应用开发训练营2025-存储权限与路径
在鸿蒙中,访问文件需要相应的权限。常用的权限包括:
ohos.permission.READ_MEDIA: 读取媒体文件。ohos.permission.WRITE_MEDIA: 写入媒体文件。ohos.permission.READ_USER_STORAGE: 读取用户存储空间。ohos.permission.WRITE_USER_STORAGE: 写入用户存储空间。
鸿蒙文件路径分为:
-
应用私有目录: 应用只能访问自己创建的文件,通常用于存储应用的数据。
-
公共目录: 允许应用与其他应用共享文件,例如图片、视频等。
使用
context.getFilesDir()获取应用私有目录,使用context.getExternalFilesDir()获取公共目录。
2.3 文件分享
鸿蒙提供了多种方式进行文件分享,包括:
Intent: 使用Intent启动其他应用来处理文件,例如分享到微信、QQ等。DataAbility: 通过DataAbility将文件暴露给其他应用,实现跨应用共享。ShareHelper: 鸿蒙提供的共享助手,可以方便地进行文件共享。
示例:使用Intent分享
import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import ohos.aafwk.content.Operation;
import ohos.bundle.ElementName;
import ohos.global.resource.RawFileDescriptor;
import java.io.File;
public class ShareUtils {
public static void shareFile(Ability ability, String filePath) {
File fileToShare = new File(filePath);
Intent intent = new Intent();
Operation operation = new Intent.OperationBuilder()
.addFlags(Intent.FLAG_NOT_OHOS_COMPONENT)
.withAction(Intent.ACTION_SEND)
.withType("application/*")
.build();
intent.setOperation(operation);
try {
RawFileDescriptor rawFileDescriptor = ability.getAbilityContext().getRawFileDescriptor(fileToShare);
intent.setUri(rawFileDescriptor.getUri());
}catch (Exception e){
e.printStackTrace();
}
ability.startAbility(intent);
}
}
3. 极客鸿蒙Next应用开发训练营2期-鸿蒙NDK开发
3.1 NDK简介
NDK (Native Development Kit) 允许开发者使用C或C++代码来开发鸿蒙应用。NDK通常用于执行计算密集型任务、访问硬件资源以及提高应用性能。
3.2 NDK环境搭建
- 安装NDK: 下载并安装鸿蒙的NDK工具链。
- 配置项目: 在应用的
build.gradle文件中配置NDK编译参数。 - 创建JNI桥接类: 创建Java类,用于调用本地代码。
- 编写本地代码: 使用C或C++编写本地代码,并生成动态链接库(.so文件)。
- 加载库文件: 在Java代码中加载本地库文件。
示例:创建简单的本地方法
- 创建JNI桥接类
NativeLibrary.java:
public class NativeLibrary {
static {
System.loadLibrary("native"); // 加载本地库
}
public native String stringFromJNI(); // 本地方法声明
}
- 编写本地代码
native.c:
#include <jni.h>
#include <string.h>
JNIEXPORT jstring JNICALL
Java_com_example_myapplication_NativeLibrary_stringFromJNI(JNIEnv *env, jobject thiz) {
return (*env)->NewStringUTF(env, "Hello from C++");
}
- 在UIAbility中使用:
import com.example.myapplication.NativeLibrary;
import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Text;
import ohos.agp.window.service.Window;
public class MainAbility extends Ability {
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
NativeLibrary nativeLib = new NativeLibrary();
String nativeString = nativeLib.stringFromJNI();
Text text = (Text) findComponentById(ResourceTable.Id_text);
text.setText(nativeString);
}
}
3.3 NDK开发注意事项
- 避免内存泄漏: 在C/C++代码中,需要手动管理内存,避免内存泄漏。
- 线程安全: 如果在本地代码中使用了多线程,需要注意线程安全问题。
- 性能测试: 对本地代码进行性能测试,找出性能瓶颈并进行优化。
- 调试: 使用NDK调试工具进行调试,例如GDB。
4. 鸿蒙应用通知与提醒
4.1 通知系统
鸿蒙提供了NotificationHelper类用于创建和管理应用通知。通知可以显示在状态栏或通知中心,用于提醒用户应用的重要事件。
4.2 创建通知
创建通知需要以下几个步骤:
- 创建
NotificationRequest: 设置通知的标题、内容、图标、点击事件等。 - 发布通知: 使用
NotificationHelper.publishNotification发布通知。
示例:创建简单的通知
import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Button;
import ohos.eventhandler.EventHandler;
import ohos.eventhandler.EventRunner;
import ohos.eventhandler.InnerEvent;
import ohos.notification.NotificationHelper;
import ohos.notification.NotificationRequest;
import ohos.notification.common.RemoteObject;
public class MainAbility extends Ability {
private static final int NOTIFICATION_ID = 1001;
private EventHandler handler;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
Button button = (Button) findComponentById(ResourceTable.Id_button);
EventRunner runner = EventRunner.create("NotificationRunner");
handler = new EventHandler(runner) {
@Override
protected void processEvent(InnerEvent event) {
if (event.eventId == 0) {
showNotification();
}
}
};
button.setClickedListener(component -> {
handler.sendEvent(0);
});
}
private void showNotification() {
NotificationRequest request = new NotificationRequest(NOTIFICATION_ID);
request.setTapAction(new RemoteObject(""));
request.setTitle("My Application");
request.setContentText("You have a new message!");
NotificationHelper.publishNotification(request);
}
}
4.3 通知渠道
为了更好地管理通知,鸿蒙引入了通知渠道的概念。通知渠道允许用户对不同类型的通知进行分类管理。
- 创建通知渠道: 使用
NotificationHelper.createNotificationChannel创建通知渠道。 - 设置通知渠道: 在发布通知时,将
NotificationRequest设置为指定的通知渠道。
4.4 通知提醒类型
鸿蒙支持多种通知提醒类型:
- 普通通知: 仅显示在通知栏中。
- 横幅通知: 在屏幕顶部弹出显示。
- 锁屏通知: 在锁屏界面显示。
- 悬浮通知: 在屏幕上方悬浮显示。
4.5 应用通知的注意事项
- 用户许可: 需要在应用的
config.json文件中声明权限,并请求用户授予通知权限。 - 通知频率: 避免过度发送通知,影响用户体验。
- 通知内容: 确保通知内容准确、简洁,并对用户有价值。
5. 进阶技巧
5.1 使用JobScheduler进行后台任务
鸿蒙提供了 JobScheduler API,用于在后台执行任务,例如文件上传、数据同步等。JobScheduler 可以根据网络状态、电量等条件,智能地调度后台任务。
5.2 使用DataAbility进行跨应用数据共享
DataAbility 允许应用安全地与其他应用共享数据,包括文件、数据库等。可以创建自定义的 DataAbility,暴露应用的数据,供其他应用使用。
5.3 使用AIDL进行跨进程通信
AIDL(Android Interface Definition Language) 也可以用于鸿蒙的跨进程通信,定义接口,用于不同进程之间的消息传递。
6. 案例演示
我们将通过一个简单的例子来演示鸿蒙的文件操作、NDK开发和应用通知功能。
- 场景: 一个应用,点击按钮,写入文件,调用NDK方法获得字符串,然后显示在TextView,同时发送一个通知。
- 步骤:
- 在
UIAbility的布局文件中创建一个TextView和一个Button。 - 在
UIAbility的onStart方法中,获取TextView和Button的实例。 - 为
Button设置点击事件监听。 - 在点击事件中,调用
FileUtils的writeFile方法写入文件。 - 调用
NativeLibrary的stringFromJNI方法获取字符串。 - 将字符串显示在
TextView上。 - 调用
NotificationHelper.publishNotification发布通知。
- 在