forked from bigzx/react-native-screen-capture
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
132 lines (123 loc) · 5.38 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// noinspection NpmUsedModulesInstalled,JSUnresolvedReference
const {NativeModules, NativeEventEmitter, DeviceEventEmitter, Platform, PermissionsAndroid} = require('react-native');
let screenShotEmitter = undefined
// noinspection JSVoidFunctionReturnValueUsed,JSCheckFunctionSignatures,JSUnusedGlobalSymbols,JSUnresolvedReference,JSDeprecatedSymbols,ES6RedundantAwait,JSIgnoredPromiseFromCall
/**
* 获取系统截屏事件/截屏工具类
* android 默认不包含状态时间
* ios 截屏不包含时间
*/
export default class ScreenShotUtil {
static checkPermissionsForScreenShot = async () => {
if (Platform.OS === 'ios') {
console.log("---- checkPermissionsForScreenShot ios")
return Promise.resolve(true);
}
const SDK_INT = +Platform.constants.Version;
console.log("---- checkPermissionsForScreenShot SDK_INT", SDK_INT)
if (SDK_INT > 22) {
if (SDK_INT > 32) {
console.log("---- checkPermissionsForScreenShot > 32")
return (await PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.READ_MEDIA_IMAGES));
} else {
console.log("---- checkPermissionsForScreenShot > 22")
return await PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE)
}
} else {
console.log("---- checkPermissionsForScreenShot return true")
return Promise.resolve(true);
}
};
static requestPermissionsForScreenShot = async () => {
if (Platform.OS === 'ios') {
console.log("---- requestPermissionsForScreenShot null, ios")
return Promise.resolve(null);
}
const SDK_INT = +Platform.constants.Version;
if (SDK_INT > 22) {
console.log("---- requestPermissionsForScreenShot SDK_INT=", SDK_INT)
if (SDK_INT > 32) {
console.log("---- requestPermissionsForScreenShot > 32")
return await PermissionsAndroid.requestMultiple([PermissionsAndroid.PERMISSIONS.READ_MEDIA_IMAGES]);
} else {
console.log("---- requestPermissionsForScreenShot > 22")
return await PermissionsAndroid.requestMultiple([PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE]);
}
} else {
console.log("---- requestPermissionsForScreenShot null, SDK_INT <= 22")
return Promise.resolve(null);
}
};
/**
* 开始监听截屏事件, keyWords android 监听数据变化,截屏文件名的关键字
* @param {*} callBack
* @param keyWords
*/
static async startListenerWithPermission(callBack, keyWords) {
if (!(await ScreenShotUtil.checkPermissionsForScreenShot())) {
console.log("---- startListenerWithPermission checkPermissionsForScreenShot false, start requestPermissionsForScreenShot")
await ScreenShotUtil.requestPermissionsForScreenShot();
}
if (await ScreenShotUtil.checkPermissionsForScreenShot()) {
console.log("---- startListenerWithPermission checkPermissionsForScreenShot true, start startListener")
return ScreenShotUtil.startListener(callBack, keyWords);
} else {
console.log("---- startListenerWithPermission checkPermissionsForScreenShot false, startListener return with null")
return Promise.resolve(null);
}
}
static startListener(callBack, keyWords) {
console.log("---- startListener keyWords=", keyWords)
const ScreenShot = NativeModules.ScreenShot;
// 创建自定义事件接口
screenShotEmitter && screenShotEmitter.removeAllListeners('ScreenShot')
screenShotEmitter = Platform.OS === 'ios' ? new NativeEventEmitter(ScreenShot) : DeviceEventEmitter;
screenShotEmitter.addListener('ScreenShot', (data) => {
console.log("---- startListener callBack data.uri=", (!!data? data.uri : 'null'))
if (callBack) {
callBack(data)
}
})
if (Platform.OS === 'android') {
console.log("---- startListener ScreenShot.startListener")
ScreenShot.startListener(keyWords);
} else {
ScreenShot.startListener();
}
return screenShotEmitter
}
/**
* 停止监听
*/
static stopListener() {
screenShotEmitter && screenShotEmitter.removeAllListeners('ScreenShot')
const ScreenShot = NativeModules.ScreenShot;
return ScreenShot.stopListener();
}
/**
* 清除截屏缓存文件
* @param {*} callBack
*/
static clearCache(callBack) {
const ScreenShot = NativeModules.ScreenShot;
ScreenShot.clearCache().then(res => {
callBack && callBack(res)
}).catch(err => {
callBack && callBack(err)
})
}
/**
* 截取当前屏幕方法
*/
static screenShot = (callBack, isHiddenStatus, {extension = 'png', quality = 100, scale = 0}) => {
const ScreenShot = NativeModules.ScreenShot;
if (isHiddenStatus === undefined || isHiddenStatus === null) {
isHiddenStatus = Platform.OS === 'android'
}
ScreenShot.screenShot(isHiddenStatus, extension || 'png', quality || 100, scale || 0).then(res => {
callBack && callBack(res)
}).catch(err => {
callBack && callBack(err)
})
}
}