Read the original article:How to Prevent Screenshots on a Specific Page in HarmonyOS Next
Introduction
Protecting user privacy is a key concern, especially on wearable devices where sensitive data can be displayed. In this article, we will explore how to block screenshots on a specific page in a HarmonyOS Next wearable app using ArkTS. This approach is ideal for pages showing confidential information, such as one-time passwords, personal data, or any sensitive screen content.
We’ll cover a practical example using the new privacy API and best practices for modularizing your privacy control logic.
Description
Wearables are increasingly used for accessing private content, health data, passwords, secure notifications, and more. While HarmonyOS Next provides system-level privacy features, there are cases where you want fine-grained control, such as blocking screenshots only on selected pages instead of the entire app.
Solution Approach
1. Project Setup
Ensure your HarmonyOS Next project includes the required permission in yourmodule.json5:
"requestPermissions": [
{ "name": "ohos.permission.PRIVACY_WINDOW" }
]
Required permission to enable window privacy mode and block screenshots in HarmonyOS Next.
2. Managing Window Privacy Mode
HarmonyOS Next provides a simple API to control privacy on a per-window basis. The trick is to enable privacy only when the Protected page is active.
We’ll extract the logic into a utility class for reuse:
import { common } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { window } from '@kit.ArkUI';
export class WindowUtils {
static setWindowPrivacyModeInPage(
context: common.UIAbilityContext,
isFlag: boolean
) {
window.getLastWindow(context).then((lastWindow) => {
lastWindow.setWindowPrivacyMode(isFlag, (err: BusinessError) => {
if (err.code) {
console.error(
'Failed to set the window to privacy mode. Cause:' +
JSON.stringify(err)
);
return;
}
console.info('Succeeded in setting the window to privacy mode.');
});
});
}
}
Utility class for enabling or disabling window privacy mode to control screenshot blocking in HarmonyOS Next.
3. Implementing the UI
Let’s create a simple UI with two tabs: Unprotected and Protected. When the “Protected” tab is selected, screenshot blocking will be enabled.
@Entry
@Component
struct Index {
@State private currentScreen: string = 'unprotected';
build() {
// Tab buttons and dynamic page content
// ...
}
}
Index component handling tab navigation and dynamic content display.
4. Protected Screen
The ProtectedScreen component demonstrates how to enable and disable anti-screenshot functionality on a specific page using ArkTS.
import { common } from "@kit.AbilityKit";
import { WindowUtils } from "./WindowUtils";
@Component
export struct ProtectedScreen {
aboutToAppear() {
WindowUtils.setWindowPrivacyModeInPage(
getContext(this) as common.UIAbilityContext,
true
);
}
aboutToDisappear() {
WindowUtils.setWindowPrivacyModeInPage(
getContext(this) as common.UIAbilityContext,
false
);
}
build() {
// simple UI code
}
}
ProtectedScreen component that enables screenshot blocking only while this page is active.
When the ProtectedScreen is shown, the aboutToAppear lifecycle hook triggers, enabling window privacy mode via the utility function. This blocks screenshots while the user is on this page. When the user navigates away, the aboutToDisappear hook disables privacy mode, restoring normal screenshot behavior for the rest of the app.
Conclusion
With HarmonyOS Next, you can easily block screenshots on sensitive pages by enabling window privacy mode when needed. This approach protects user data without impacting the rest of your app, making it a best practice for privacy-focused wearable applications.
References
https://forums.developer.huawei.com/forumPortal/en/topic/0203189954410068038?fid=0102647487706140266
Written by Ahmet Furkan