-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbackgroundServiceControl.ts
More file actions
52 lines (45 loc) · 1.77 KB
/
backgroundServiceControl.ts
File metadata and controls
52 lines (45 loc) · 1.77 KB
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
import { NativeModules, PermissionsAndroid, Platform, Linking, Alert } from 'react-native';
export async function startBackgroundService() {
if (Platform.OS !== 'android') return;
const fine = PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION;
const background = PermissionsAndroid.PERMISSIONS.ACCESS_BACKGROUND_LOCATION;
// 1. 현재 권한 상태 확인
const fineStatus = await PermissionsAndroid.check(fine);
const backgroundStatus = await PermissionsAndroid.check(background);
// 2. 권한 요청
const granted = await PermissionsAndroid.requestMultiple([fine, background]);
const fineGranted = granted[fine] === PermissionsAndroid.RESULTS.GRANTED;
const backgroundGranted = granted[background] === PermissionsAndroid.RESULTS.GRANTED;
if (fineGranted && backgroundGranted) {
console.log('✅ 위치 권한 허용됨');
try {
NativeModules.IntentLauncher.startService(
'com.disasteraidplatform.RecordingService',
'START'
);
} catch (e) {
console.error('startService error:', e);
Alert.alert('서비스 시작 오류', '서비스를 시작하는 중에 문제가 발생했습니다.');
}
} else {
const neverAskAgain =
granted[fine] === PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN ||
granted[background] === PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN;
if (neverAskAgain) {
Alert.alert(
'위치 권한 필요',
'앱 설정에서 위치 권한을 직접 허용해주세요.',
[
{
text: '설정 열기',
onPress: () => Linking.openSettings(),
},
{ text: '취소', style: 'cancel' },
],
{ cancelable: true }
);
} else {
Alert.alert('❌ 위치 권한이 필요합니다');
}
}
}