Ví dụ
Một ví dụ hoàn chỉnh trình bày cách sử dụng React Native ScreenGuard v2.0.0.
Cài đặt cơ bản
import React, { useEffect, useState } from 'react';
import {
View,
Text,
Button,
StyleSheet,
Alert,
SafeAreaView,
} from 'react-native';
import ScreenGuardModule, {
useSGScreenShot,
useSGScreenRecord,
} from 'react-native-screenguard';
export default function App() {
const [isProtected, setIsProtected] = useState(false);
// Hook phát hiện chụp màn hình
const { screenshotData, activationStatus } = useSGScreenShot((event) => {
Alert.alert('Đã phát hiện chụp màn hình!', `Tệp: ${event.name || 'không rõ'}`);
});
// Hook phát hiện quay màn hình (iOS 13+, Android 15+)
const { recordingData } = useSGScreenRecord((event) => {
if (event.isRecording) {
Alert.alert('Cảnh báo', 'Đã bắt đầu quay màn hình!');
}
});
// Khởi tạo ScreenGuard khi mount
useEffect(() => {
const init = async () => {
try {
await ScreenGuardModule.initSettings({
displayScreenGuardOverlay: true,
timeAfterResume: 2000,
getScreenshotPath: true,
});
console.log('Khởi tạo ScreenGuard thành công');
} catch (error) {
console.error('Khởi tạo ScreenGuard thất bại:', error);
}
};
init();
// Dọn dẹp khi unmount
return () => {
ScreenGuardModule.unregister();
};
}, []);
const activateWithColor = async () => {
try {
await ScreenGuardModule.register({
backgroundColor: '#1a1a2e',
});
setIsProtected(true);
} catch (error) {
console.error('Kích hoạt thất bại:', error);
}
};
const activateWithBlur = async () => {
try {
await ScreenGuardModule.registerWithBlurView({
radius: 30,
});
setIsProtected(true);
} catch (error) {
console.error('Kích hoạt làm mờ thất bại:', error);
}
};
const activateWithImage = async () => {
try {
await ScreenGuardModule.registerWithImage({
source: require('./assets/logo.png'),
width: 200,
height: 200,
backgroundColor: '#0f0f23',
alignment: 4, // center
});
setIsProtected(true);
} catch (error) {
console.error('Kích hoạt với hình ảnh thất bại:', error);
}
};
const deactivate = async () => {
try {
await ScreenGuardModule.unregister();
setIsProtected(false);
} catch (error) {
console.error('Hủy kích hoạt thất bại:', error);
}
};
return (
<SafeAreaView style={styles.container}>
<Text style={styles.title}>ScreenGuard Demo</Text>
{/* Hiển thị trạng thái */}
<View style={styles.statusContainer}>
<Text style={styles.statusText}>
Bảo vệ: {activationStatus?.isActivated ? '🛡️ Đang bật' : '⚪ Đang tắt'}
</Text>
<Text style={styles.statusText}>
Phương thức: {activationStatus?.method || 'Không có'}
</Text>
<Text style={styles.statusText}>
Đang quay: {recordingData?.isRecording ? '🔴 Có' : '⚪ Không'}
</Text>
{screenshotData?.name && (
<Text style={styles.statusText}>
Ảnh chụp gần nhất: {screenshotData.name}
</Text>
)}
</View>
{/* Các nút hành động */}
<View style={styles.buttonContainer}>
<Button
title="Kích hoạt với Màu sắc"
onPress={activateWithColor}
disabled={isProtected}
/>
<View style={styles.spacer} />
<Button
title="Kích hoạt với Làm mờ"
onPress={activateWithBlur}
disabled={isProtected}
/>
<View style={styles.spacer} />
<Button
title="Kích hoạt với Hình ảnh"
onPress={activateWithImage}
disabled={isProtected}
/>
<View style={styles.spacer} />
<Button
title="Hủy kích hoạt"
onPress={deactivate}
disabled={!isProtected}
color="#ff4444"
/>
</View>
</SafeAreaView>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
padding: 20,
backgroundColor: '#f5f5f5',
},
title: {
fontSize: 24,
fontWeight: 'bold',
textAlign: 'center',
marginBottom: 30,
},
statusContainer: {
backgroundColor: '#fff',
padding: 20,
borderRadius: 10,
marginBottom: 30,
},
statusText: {
fontSize: 16,
marginBottom: 8,
},
buttonContainer: {
gap: 10,
},
spacer: {
height: 10,
},
});
Các điểm chính
-
Luôn gọi
initSettings()trước tiên - Việc này giúp khởi tạo module native với cấu hình mong muốn của bạn. -
Sử dụng hooks để phát hiện sự kiện -
useSGScreenShotvàuseSGScreenRecordtự động xử lý việc đăng ký và dọn dẹp. -
Chỉ sử dụng một phương thức đăng ký tại một thời điểm - Đừng gọi đồng thời nhiều hàm
register*. Hãy gọiunregister()trước nếu bạn muốn chuyển đổi phương thức. -
Gọi
unregister()khi dọn dẹp - Khi component của bạn unmount hoặc bạn muốn tắt tính năng bảo vệ.