@jincheng_1995/react-native-device-info-plus 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,283 @@
1
+ #import "DeviceInfoPlus.h"
2
+ #import <UIKit/UIKit.h>
3
+ #import <CoreMotion/CoreMotion.h>
4
+ #import <sys/utsname.h>
5
+
6
+ @implementation DeviceInfoPlus {
7
+ CMMotionManager *motionManager;
8
+ NSTimer *accelerometerTimer;
9
+ NSTimer *gyroscopeTimer;
10
+ BOOL hasListeners;
11
+ }
12
+
13
+ RCT_EXPORT_MODULE()
14
+
15
+ + (BOOL)requiresMainQueueSetup {
16
+ return YES;
17
+ }
18
+
19
+ - (instancetype)init {
20
+ self = [super init];
21
+ if (self) {
22
+ motionManager = [[CMMotionManager alloc] init];
23
+ hasListeners = NO;
24
+ }
25
+ return self;
26
+ }
27
+
28
+ - (NSArray<NSString *> *)supportedEvents {
29
+ return @[@"onAccelerometerData", @"onGyroscopeData"];
30
+ }
31
+
32
+ - (void)startObserving {
33
+ hasListeners = YES;
34
+ }
35
+
36
+ - (void)stopObserving {
37
+ hasListeners = NO;
38
+ }
39
+
40
+ // 设备信息
41
+ RCT_EXPORT_METHOD(getDeviceModel:(RCTPromiseResolveBlock)resolve
42
+ reject:(RCTPromiseRejectBlock)reject) {
43
+ struct utsname systemInfo;
44
+ uname(&systemInfo);
45
+ NSString *model = [NSString stringWithCString:systemInfo.machine
46
+ encoding:NSUTF8StringEncoding];
47
+ resolve(model);
48
+ }
49
+
50
+ RCT_EXPORT_METHOD(getDeviceBrand:(RCTPromiseResolveBlock)resolve
51
+ reject:(RCTPromiseRejectBlock)reject) {
52
+ resolve(@"Apple");
53
+ }
54
+
55
+ RCT_EXPORT_METHOD(getManufacturer:(RCTPromiseResolveBlock)resolve
56
+ reject:(RCTPromiseRejectBlock)reject) {
57
+ resolve(@"Apple");
58
+ }
59
+
60
+ RCT_EXPORT_METHOD(getSystemVersion:(RCTPromiseResolveBlock)resolve
61
+ reject:(RCTPromiseRejectBlock)reject) {
62
+ NSString *version = [[UIDevice currentDevice] systemVersion];
63
+ resolve(version);
64
+ }
65
+
66
+ RCT_EXPORT_METHOD(getUniqueId:(RCTPromiseResolveBlock)resolve
67
+ reject:(RCTPromiseRejectBlock)reject) {
68
+ NSString *uuid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
69
+ resolve(uuid);
70
+ }
71
+
72
+ RCT_EXPORT_METHOD(getDeviceName:(RCTPromiseResolveBlock)resolve
73
+ reject:(RCTPromiseRejectBlock)reject) {
74
+ NSString *name = [[UIDevice currentDevice] name];
75
+ resolve(name);
76
+ }
77
+
78
+ // 网络状态
79
+ RCT_EXPORT_METHOD(getNetworkType:(RCTPromiseResolveBlock)resolve
80
+ reject:(RCTPromiseRejectBlock)reject) {
81
+ // 简化实现,实际应使用 Reachability
82
+ resolve(@"wifi");
83
+ }
84
+
85
+ // 电池信息
86
+ RCT_EXPORT_METHOD(getBatteryLevel:(RCTPromiseResolveBlock)resolve
87
+ reject:(RCTPromiseRejectBlock)reject) {
88
+ [[UIDevice currentDevice] setBatteryMonitoringEnabled:YES];
89
+ float batteryLevel = [[UIDevice currentDevice] batteryLevel];
90
+ resolve(@(batteryLevel));
91
+ }
92
+
93
+ RCT_EXPORT_METHOD(isBatteryCharging:(RCTPromiseResolveBlock)resolve
94
+ reject:(RCTPromiseRejectBlock)reject) {
95
+ [[UIDevice currentDevice] setBatteryMonitoringEnabled:YES];
96
+ UIDeviceBatteryState state = [[UIDevice currentDevice] batteryState];
97
+ BOOL isCharging = (state == UIDeviceBatteryStateCharging ||
98
+ state == UIDeviceBatteryStateFull);
99
+ resolve(@(isCharging));
100
+ }
101
+
102
+ // 存储信息
103
+ RCT_EXPORT_METHOD(getTotalStorage:(RCTPromiseResolveBlock)resolve
104
+ reject:(RCTPromiseRejectBlock)reject) {
105
+ NSError *error = nil;
106
+ NSDictionary *attributes = [[NSFileManager defaultManager]
107
+ attributesOfFileSystemForPath:NSHomeDirectory() error:&error];
108
+
109
+ if (error) {
110
+ reject(@"ERROR", @"Failed to get storage info", error);
111
+ return;
112
+ }
113
+
114
+ unsigned long long totalSpace = [[attributes objectForKey:NSFileSystemSize]
115
+ unsignedLongLongValue];
116
+ resolve(@(totalSpace));
117
+ }
118
+
119
+ RCT_EXPORT_METHOD(getFreeStorage:(RCTPromiseResolveBlock)resolve
120
+ reject:(RCTPromiseRejectBlock)reject) {
121
+ NSError *error = nil;
122
+ NSDictionary *attributes = [[NSFileManager defaultManager]
123
+ attributesOfFileSystemForPath:NSHomeDirectory() error:&error];
124
+
125
+ if (error) {
126
+ reject(@"ERROR", @"Failed to get storage info", error);
127
+ return;
128
+ }
129
+
130
+ unsigned long long freeSpace = [[attributes objectForKey:NSFileSystemFreeSize]
131
+ unsignedLongLongValue];
132
+ resolve(@(freeSpace));
133
+ }
134
+
135
+ // 屏幕信息
136
+ RCT_EXPORT_METHOD(getScreenInfo:(RCTPromiseResolveBlock)resolve
137
+ reject:(RCTPromiseRejectBlock)reject) {
138
+ CGRect screenBounds = [[UIScreen mainScreen] bounds];
139
+ CGFloat scale = [[UIScreen mainScreen] scale];
140
+
141
+ NSDictionary *screenInfo = @{
142
+ @"width": @(screenBounds.size.width * scale),
143
+ @"height": @(screenBounds.size.height * scale),
144
+ @"scale": @(scale),
145
+ @"fontScale": @(1.0)
146
+ };
147
+
148
+ resolve(screenInfo);
149
+ }
150
+
151
+ // 设备操作
152
+ RCT_EXPORT_METHOD(vibrate:(double)duration) {
153
+ dispatch_async(dispatch_get_main_queue(), ^{
154
+ AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
155
+ });
156
+ }
157
+
158
+ RCT_EXPORT_METHOD(setBrightness:(double)brightness
159
+ resolve:(RCTPromiseResolveBlock)resolve
160
+ reject:(RCTPromiseRejectBlock)reject) {
161
+ dispatch_async(dispatch_get_main_queue(), ^{
162
+ [[UIScreen mainScreen] setBrightness:brightness];
163
+ resolve(nil);
164
+ });
165
+ }
166
+
167
+ RCT_EXPORT_METHOD(getBrightness:(RCTPromiseResolveBlock)resolve
168
+ reject:(RCTPromiseRejectBlock)reject) {
169
+ CGFloat brightness = [[UIScreen mainScreen] brightness];
170
+ resolve(@(brightness));
171
+ }
172
+
173
+ RCT_EXPORT_METHOD(setClipboard:(NSString *)text
174
+ resolve:(RCTPromiseResolveBlock)resolve
175
+ reject:(RCTPromiseRejectBlock)reject) {
176
+ UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
177
+ pasteboard.string = text;
178
+ resolve(nil);
179
+ }
180
+
181
+ RCT_EXPORT_METHOD(getClipboard:(RCTPromiseResolveBlock)resolve
182
+ reject:(RCTPromiseRejectBlock)reject) {
183
+ UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
184
+ NSString *text = pasteboard.string ?: @"";
185
+ resolve(text);
186
+ }
187
+
188
+ RCT_EXPORT_METHOD(openSettings) {
189
+ dispatch_async(dispatch_get_main_queue(), ^{
190
+ NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
191
+ if ([[UIApplication sharedApplication] canOpenURL:url]) {
192
+ [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
193
+ }
194
+ });
195
+ }
196
+
197
+ // 音量控制
198
+ RCT_EXPORT_METHOD(getVolume:(RCTPromiseResolveBlock)resolve
199
+ reject:(RCTPromiseRejectBlock)reject) {
200
+ // iOS 不允许直接获取系统音量,返回默认值
201
+ resolve(@(0.5));
202
+ }
203
+
204
+ RCT_EXPORT_METHOD(setVolume:(double)volume
205
+ resolve:(RCTPromiseResolveBlock)resolve
206
+ reject:(RCTPromiseRejectBlock)reject) {
207
+ // iOS 不允许直接设置系统音量
208
+ reject(@"UNSUPPORTED", @"iOS does not support setting system volume", nil);
209
+ }
210
+
211
+ // 传感器
212
+ RCT_EXPORT_METHOD(startAccelerometer:(double)interval) {
213
+ if (!motionManager.accelerometerAvailable) {
214
+ return;
215
+ }
216
+
217
+ motionManager.accelerometerUpdateInterval = interval / 1000.0;
218
+
219
+ [motionManager startAccelerometerUpdates];
220
+
221
+ accelerometerTimer = [NSTimer scheduledTimerWithTimeInterval:interval / 1000.0
222
+ repeats:YES
223
+ block:^(NSTimer * _Nonnull timer) {
224
+ if (self->hasListeners && self->motionManager.accelerometerData) {
225
+ CMAccelerometerData *data = self->motionManager.accelerometerData;
226
+ [self sendEventWithName:@"onAccelerometerData" body:@{
227
+ @"x": @(data.acceleration.x),
228
+ @"y": @(data.acceleration.y),
229
+ @"z": @(data.acceleration.z),
230
+ @"timestamp": @([[NSDate date] timeIntervalSince1970] * 1000)
231
+ }];
232
+ }
233
+ }];
234
+ }
235
+
236
+ RCT_EXPORT_METHOD(stopAccelerometer) {
237
+ [motionManager stopAccelerometerUpdates];
238
+ if (accelerometerTimer) {
239
+ [accelerometerTimer invalidate];
240
+ accelerometerTimer = nil;
241
+ }
242
+ }
243
+
244
+ RCT_EXPORT_METHOD(startGyroscope:(double)interval) {
245
+ if (!motionManager.gyroAvailable) {
246
+ return;
247
+ }
248
+
249
+ motionManager.gyroUpdateInterval = interval / 1000.0;
250
+
251
+ [motionManager startGyroUpdates];
252
+
253
+ gyroscopeTimer = [NSTimer scheduledTimerWithTimeInterval:interval / 1000.0
254
+ repeats:YES
255
+ block:^(NSTimer * _Nonnull timer) {
256
+ if (self->hasListeners && self->motionManager.gyroData) {
257
+ CMGyroData *data = self->motionManager.gyroData;
258
+ [self sendEventWithName:@"onGyroscopeData" body:@{
259
+ @"x": @(data.rotationRate.x),
260
+ @"y": @(data.rotationRate.y),
261
+ @"z": @(data.rotationRate.z),
262
+ @"timestamp": @([[NSDate date] timeIntervalSince1970] * 1000)
263
+ }];
264
+ }
265
+ }];
266
+ }
267
+
268
+ RCT_EXPORT_METHOD(stopGyroscope) {
269
+ [motionManager stopGyroUpdates];
270
+ if (gyroscopeTimer) {
271
+ [gyroscopeTimer invalidate];
272
+ gyroscopeTimer = nil;
273
+ }
274
+ }
275
+
276
+ #ifdef RCT_NEW_ARCH_ENABLED
277
+ - (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
278
+ (const facebook::react::ObjCTurboModule::InitParams &)params {
279
+ return std::make_shared<facebook::react::NativeDeviceInfoPlusSpecJSI>(params);
280
+ }
281
+ #endif
282
+
283
+ @end
@@ -0,0 +1,33 @@
1
+ require "json"
2
+
3
+ package = JSON.parse(File.read(File.join(__dir__, "../package.json")))
4
+
5
+ Pod::Spec.new do |s|
6
+ s.name = "DeviceInfoPlus"
7
+ s.version = package["version"]
8
+ s.summary = package["description"]
9
+ s.homepage = package["homepage"]
10
+ s.license = package["license"]
11
+ s.authors = package["author"]
12
+
13
+ s.platforms = { :ios => "13.0" }
14
+ s.source = { :git => package["repository"], :tag => "#{s.version}" }
15
+
16
+ s.source_files = "*.{h,m,mm}"
17
+
18
+ if ENV['RCT_NEW_ARCH_ENABLED'] == '1' then
19
+ s.compiler_flags = "-DRCT_NEW_ARCH_ENABLED=1"
20
+ s.pod_target_xcconfig = {
21
+ "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\"",
22
+ "CLANG_CXX_LANGUAGE_STANDARD" => "c++17"
23
+ }
24
+
25
+ s.dependency "React-Codegen"
26
+ s.dependency "RCT-Folly"
27
+ s.dependency "RCTRequired"
28
+ s.dependency "RCTTypeSafety"
29
+ s.dependency "ReactCommon/turbomodule/core"
30
+ end
31
+
32
+ s.dependency "React-Core"
33
+ end
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _reactNative = require("react-native");
8
+ var _default = exports.default = _reactNative.TurboModuleRegistry.getEnforcing('DeviceInfoPlus');
9
+ //# sourceMappingURL=NativeDeviceInfoPlus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","_default","exports","default","TurboModuleRegistry","getEnforcing"],"sourceRoot":"..\\..\\src","sources":["NativeDeviceInfoPlus.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAAmD,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GA0DpCC,gCAAmB,CAACC,YAAY,CAAO,gBAAgB,CAAC","ignoreList":[]}
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _reactNative = require("react-native");
8
+ var _NativeDeviceInfoPlus = _interopRequireDefault(require("./NativeDeviceInfoPlus"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ const LINKING_ERROR = `The package 'react-native-device-info-plus' doesn't seem to be linked. Make sure: \n\n` + _reactNative.Platform.select({
11
+ ios: "- Run 'pod install'\n",
12
+ default: ''
13
+ }) + '- Rebuild the app after installing the package\n' + '- If you are using Expo, run expo prebuild\n';
14
+ const DeviceInfoPlus = _NativeDeviceInfoPlus.default ? _NativeDeviceInfoPlus.default : new Proxy({}, {
15
+ get() {
16
+ throw new Error(LINKING_ERROR);
17
+ }
18
+ });
19
+ const eventEmitter = new _reactNative.NativeEventEmitter(_reactNative.NativeModules.DeviceInfoPlus);
20
+ class DeviceInfoPlusModule {
21
+ // 设备信息
22
+ async getDeviceModel() {
23
+ return DeviceInfoPlus.getDeviceModel();
24
+ }
25
+ async getDeviceBrand() {
26
+ return DeviceInfoPlus.getDeviceBrand();
27
+ }
28
+ async getManufacturer() {
29
+ return DeviceInfoPlus.getManufacturer();
30
+ }
31
+ async getSystemVersion() {
32
+ return DeviceInfoPlus.getSystemVersion();
33
+ }
34
+ async getUniqueId() {
35
+ return DeviceInfoPlus.getUniqueId();
36
+ }
37
+ async getDeviceName() {
38
+ return DeviceInfoPlus.getDeviceName();
39
+ }
40
+
41
+ // 网络状态
42
+ async getNetworkType() {
43
+ return DeviceInfoPlus.getNetworkType();
44
+ }
45
+
46
+ // 电池信息
47
+ async getBatteryLevel() {
48
+ return DeviceInfoPlus.getBatteryLevel();
49
+ }
50
+ async isBatteryCharging() {
51
+ return DeviceInfoPlus.isBatteryCharging();
52
+ }
53
+
54
+ // 存储信息
55
+ async getTotalStorage() {
56
+ return DeviceInfoPlus.getTotalStorage();
57
+ }
58
+ async getFreeStorage() {
59
+ return DeviceInfoPlus.getFreeStorage();
60
+ }
61
+
62
+ // 屏幕信息
63
+ async getScreenInfo() {
64
+ return DeviceInfoPlus.getScreenInfo();
65
+ }
66
+
67
+ // 设备操作
68
+ vibrate(duration = 400) {
69
+ DeviceInfoPlus.vibrate(duration);
70
+ }
71
+ async setBrightness(brightness) {
72
+ if (brightness < 0 || brightness > 1) {
73
+ throw new Error('Brightness must be between 0 and 1');
74
+ }
75
+ return DeviceInfoPlus.setBrightness(brightness);
76
+ }
77
+ async getBrightness() {
78
+ return DeviceInfoPlus.getBrightness();
79
+ }
80
+ async setClipboard(text) {
81
+ return DeviceInfoPlus.setClipboard(text);
82
+ }
83
+ async getClipboard() {
84
+ return DeviceInfoPlus.getClipboard();
85
+ }
86
+ openSettings() {
87
+ DeviceInfoPlus.openSettings();
88
+ }
89
+
90
+ // 音量控制
91
+ async getVolume() {
92
+ return DeviceInfoPlus.getVolume();
93
+ }
94
+ async setVolume(volume) {
95
+ if (volume < 0 || volume > 1) {
96
+ throw new Error('Volume must be between 0 and 1');
97
+ }
98
+ return DeviceInfoPlus.setVolume(volume);
99
+ }
100
+
101
+ // 传感器监听
102
+ addAccelerometerListener(callback, interval = 100) {
103
+ DeviceInfoPlus.startAccelerometer(interval);
104
+ const subscription = eventEmitter.addListener('onAccelerometerData', callback);
105
+ return {
106
+ remove: () => {
107
+ subscription.remove();
108
+ DeviceInfoPlus.stopAccelerometer();
109
+ }
110
+ };
111
+ }
112
+ addGyroscopeListener(callback, interval = 100) {
113
+ DeviceInfoPlus.startGyroscope(interval);
114
+ const subscription = eventEmitter.addListener('onGyroscopeData', callback);
115
+ return {
116
+ remove: () => {
117
+ subscription.remove();
118
+ DeviceInfoPlus.stopGyroscope();
119
+ }
120
+ };
121
+ }
122
+ }
123
+ var _default = exports.default = new DeviceInfoPlusModule();
124
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","_NativeDeviceInfoPlus","_interopRequireDefault","e","__esModule","default","LINKING_ERROR","Platform","select","ios","DeviceInfoPlus","NativeDeviceInfoPlus","Proxy","get","Error","eventEmitter","NativeEventEmitter","NativeModules","DeviceInfoPlusModule","getDeviceModel","getDeviceBrand","getManufacturer","getSystemVersion","getUniqueId","getDeviceName","getNetworkType","getBatteryLevel","isBatteryCharging","getTotalStorage","getFreeStorage","getScreenInfo","vibrate","duration","setBrightness","brightness","getBrightness","setClipboard","text","getClipboard","openSettings","getVolume","setVolume","volume","addAccelerometerListener","callback","interval","startAccelerometer","subscription","addListener","remove","stopAccelerometer","addGyroscopeListener","startGyroscope","stopGyroscope","_default","exports"],"sourceRoot":"..\\..\\src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ import { TurboModuleRegistry } from 'react-native';
2
+ export default TurboModuleRegistry.getEnforcing('DeviceInfoPlus');
3
+ //# sourceMappingURL=NativeDeviceInfoPlus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"..\\..\\src","sources":["NativeDeviceInfoPlus.ts"],"mappings":"AACA,SAASA,mBAAmB,QAAQ,cAAc;AA0DlD,eAAeA,mBAAmB,CAACC,YAAY,CAAO,gBAAgB,CAAC","ignoreList":[]}
@@ -0,0 +1,117 @@
1
+ import { NativeEventEmitter, NativeModules, Platform } from 'react-native';
2
+ import NativeDeviceInfoPlus from './NativeDeviceInfoPlus';
3
+ const LINKING_ERROR = `The package 'react-native-device-info-plus' doesn't seem to be linked. Make sure: \n\n` + Platform.select({
4
+ ios: "- Run 'pod install'\n",
5
+ default: ''
6
+ }) + '- Rebuild the app after installing the package\n' + '- If you are using Expo, run expo prebuild\n';
7
+ const DeviceInfoPlus = NativeDeviceInfoPlus ? NativeDeviceInfoPlus : new Proxy({}, {
8
+ get() {
9
+ throw new Error(LINKING_ERROR);
10
+ }
11
+ });
12
+ const eventEmitter = new NativeEventEmitter(NativeModules.DeviceInfoPlus);
13
+ class DeviceInfoPlusModule {
14
+ // 设备信息
15
+ async getDeviceModel() {
16
+ return DeviceInfoPlus.getDeviceModel();
17
+ }
18
+ async getDeviceBrand() {
19
+ return DeviceInfoPlus.getDeviceBrand();
20
+ }
21
+ async getManufacturer() {
22
+ return DeviceInfoPlus.getManufacturer();
23
+ }
24
+ async getSystemVersion() {
25
+ return DeviceInfoPlus.getSystemVersion();
26
+ }
27
+ async getUniqueId() {
28
+ return DeviceInfoPlus.getUniqueId();
29
+ }
30
+ async getDeviceName() {
31
+ return DeviceInfoPlus.getDeviceName();
32
+ }
33
+
34
+ // 网络状态
35
+ async getNetworkType() {
36
+ return DeviceInfoPlus.getNetworkType();
37
+ }
38
+
39
+ // 电池信息
40
+ async getBatteryLevel() {
41
+ return DeviceInfoPlus.getBatteryLevel();
42
+ }
43
+ async isBatteryCharging() {
44
+ return DeviceInfoPlus.isBatteryCharging();
45
+ }
46
+
47
+ // 存储信息
48
+ async getTotalStorage() {
49
+ return DeviceInfoPlus.getTotalStorage();
50
+ }
51
+ async getFreeStorage() {
52
+ return DeviceInfoPlus.getFreeStorage();
53
+ }
54
+
55
+ // 屏幕信息
56
+ async getScreenInfo() {
57
+ return DeviceInfoPlus.getScreenInfo();
58
+ }
59
+
60
+ // 设备操作
61
+ vibrate(duration = 400) {
62
+ DeviceInfoPlus.vibrate(duration);
63
+ }
64
+ async setBrightness(brightness) {
65
+ if (brightness < 0 || brightness > 1) {
66
+ throw new Error('Brightness must be between 0 and 1');
67
+ }
68
+ return DeviceInfoPlus.setBrightness(brightness);
69
+ }
70
+ async getBrightness() {
71
+ return DeviceInfoPlus.getBrightness();
72
+ }
73
+ async setClipboard(text) {
74
+ return DeviceInfoPlus.setClipboard(text);
75
+ }
76
+ async getClipboard() {
77
+ return DeviceInfoPlus.getClipboard();
78
+ }
79
+ openSettings() {
80
+ DeviceInfoPlus.openSettings();
81
+ }
82
+
83
+ // 音量控制
84
+ async getVolume() {
85
+ return DeviceInfoPlus.getVolume();
86
+ }
87
+ async setVolume(volume) {
88
+ if (volume < 0 || volume > 1) {
89
+ throw new Error('Volume must be between 0 and 1');
90
+ }
91
+ return DeviceInfoPlus.setVolume(volume);
92
+ }
93
+
94
+ // 传感器监听
95
+ addAccelerometerListener(callback, interval = 100) {
96
+ DeviceInfoPlus.startAccelerometer(interval);
97
+ const subscription = eventEmitter.addListener('onAccelerometerData', callback);
98
+ return {
99
+ remove: () => {
100
+ subscription.remove();
101
+ DeviceInfoPlus.stopAccelerometer();
102
+ }
103
+ };
104
+ }
105
+ addGyroscopeListener(callback, interval = 100) {
106
+ DeviceInfoPlus.startGyroscope(interval);
107
+ const subscription = eventEmitter.addListener('onGyroscopeData', callback);
108
+ return {
109
+ remove: () => {
110
+ subscription.remove();
111
+ DeviceInfoPlus.stopGyroscope();
112
+ }
113
+ };
114
+ }
115
+ }
116
+ export default new DeviceInfoPlusModule();
117
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NativeEventEmitter","NativeModules","Platform","NativeDeviceInfoPlus","LINKING_ERROR","select","ios","default","DeviceInfoPlus","Proxy","get","Error","eventEmitter","DeviceInfoPlusModule","getDeviceModel","getDeviceBrand","getManufacturer","getSystemVersion","getUniqueId","getDeviceName","getNetworkType","getBatteryLevel","isBatteryCharging","getTotalStorage","getFreeStorage","getScreenInfo","vibrate","duration","setBrightness","brightness","getBrightness","setClipboard","text","getClipboard","openSettings","getVolume","setVolume","volume","addAccelerometerListener","callback","interval","startAccelerometer","subscription","addListener","remove","stopAccelerometer","addGyroscopeListener","startGyroscope","stopGyroscope"],"sourceRoot":"..\\..\\src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,42 @@
1
+ import type { TurboModule } from 'react-native';
2
+ export interface ScreenInfo {
3
+ width: number;
4
+ height: number;
5
+ scale: number;
6
+ fontScale: number;
7
+ }
8
+ export interface SensorData {
9
+ x: number;
10
+ y: number;
11
+ z: number;
12
+ timestamp: number;
13
+ }
14
+ export interface Spec extends TurboModule {
15
+ getDeviceModel(): Promise<string>;
16
+ getDeviceBrand(): Promise<string>;
17
+ getManufacturer(): Promise<string>;
18
+ getSystemVersion(): Promise<string>;
19
+ getUniqueId(): Promise<string>;
20
+ getDeviceName(): Promise<string>;
21
+ getNetworkType(): Promise<string>;
22
+ getBatteryLevel(): Promise<number>;
23
+ isBatteryCharging(): Promise<boolean>;
24
+ getTotalStorage(): Promise<number>;
25
+ getFreeStorage(): Promise<number>;
26
+ getScreenInfo(): Promise<ScreenInfo>;
27
+ vibrate(duration: number): void;
28
+ setBrightness(brightness: number): Promise<void>;
29
+ getBrightness(): Promise<number>;
30
+ setClipboard(text: string): Promise<void>;
31
+ getClipboard(): Promise<string>;
32
+ openSettings(): void;
33
+ getVolume(): Promise<number>;
34
+ setVolume(volume: number): Promise<void>;
35
+ startAccelerometer(interval: number): void;
36
+ stopAccelerometer(): void;
37
+ startGyroscope(interval: number): void;
38
+ stopGyroscope(): void;
39
+ }
40
+ declare const _default: Spec;
41
+ export default _default;
42
+ //# sourceMappingURL=NativeDeviceInfoPlus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NativeDeviceInfoPlus.d.ts","sourceRoot":"","sources":["../../src/NativeDeviceInfoPlus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,IAAK,SAAQ,WAAW;IAEvC,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAClC,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAClC,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAGjC,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAGlC,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAGtC,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAGlC,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAGrC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACjC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAChC,YAAY,IAAI,IAAI,CAAC;IAGrB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGzC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,iBAAiB,IAAI,IAAI,CAAC;IAC1B,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,aAAa,IAAI,IAAI,CAAC;CACvB;;AAED,wBAAwE"}
@@ -0,0 +1,35 @@
1
+ import type { ScreenInfo, SensorData } from './NativeDeviceInfoPlus';
2
+ export type { ScreenInfo, SensorData };
3
+ export interface AccelerometerSubscription {
4
+ remove: () => void;
5
+ }
6
+ export interface GyroscopeSubscription {
7
+ remove: () => void;
8
+ }
9
+ declare class DeviceInfoPlusModule {
10
+ getDeviceModel(): Promise<string>;
11
+ getDeviceBrand(): Promise<string>;
12
+ getManufacturer(): Promise<string>;
13
+ getSystemVersion(): Promise<string>;
14
+ getUniqueId(): Promise<string>;
15
+ getDeviceName(): Promise<string>;
16
+ getNetworkType(): Promise<string>;
17
+ getBatteryLevel(): Promise<number>;
18
+ isBatteryCharging(): Promise<boolean>;
19
+ getTotalStorage(): Promise<number>;
20
+ getFreeStorage(): Promise<number>;
21
+ getScreenInfo(): Promise<ScreenInfo>;
22
+ vibrate(duration?: number): void;
23
+ setBrightness(brightness: number): Promise<void>;
24
+ getBrightness(): Promise<number>;
25
+ setClipboard(text: string): Promise<void>;
26
+ getClipboard(): Promise<string>;
27
+ openSettings(): void;
28
+ getVolume(): Promise<number>;
29
+ setVolume(volume: number): Promise<void>;
30
+ addAccelerometerListener(callback: (data: SensorData) => void, interval?: number): AccelerometerSubscription;
31
+ addGyroscopeListener(callback: (data: SensorData) => void, interval?: number): GyroscopeSubscription;
32
+ }
33
+ declare const _default: DeviceInfoPlusModule;
34
+ export default _default;
35
+ //# sourceMappingURL=index.d.ts.map