Background Geolocation 是一个用于在后台获取设备位置信息的库,可以在 React 或 Ionic 应用中使用。其权限模型包括以下几个步骤:
AndroidManifest.xml
或 Info.plist
文件中添加相关权限声明,示例如下:在 AndroidManifest.xml 文件中添加以下代码:
在 Info.plist 文件中添加以下代码:
NSLocationAlwaysAndWhenInUseUsageDescription
We need access to your location to provide accurate data.
NSLocationWhenInUseUsageDescription
We need access to your location to provide accurate data.
对于 React Native,可以使用 PermissionsAndroid
组件请求位置权限,示例如下:
import { PermissionsAndroid } from 'react-native';
const requestLocationPermission = async () => {
try {
const granted = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
{
title: 'Location Permission',
message: 'We need access to your location to provide accurate data.',
buttonPositive: 'OK',
buttonNegative: 'Cancel',
},
);
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
console.log('Location permission granted');
// 在这里初始化 Background Geolocation
} else {
console.log('Location permission denied');
}
} catch (err) {
console.warn(err);
}
};
对于 Ionic,可以使用 cordova-plugin-android-permissions
插件请求位置权限,示例如下:
import { AndroidPermissions } from '@ionic-native/android-permissions/ngx';
constructor(private androidPermissions: AndroidPermissions) {
this.androidPermissions.checkPermission(
this.androidPermissions.PERMISSION.ACCESS_FINE_LOCATION
).then((result) => {
if (result.hasPermission) {
console.log('Location permission granted');
// 在这里初始化 Background Geolocation
} else {
console.log('Location permission denied');
}
}, (err) => {
console.warn(err);
});
}
对于 React Native,可以使用 react-native-background-geolocation
库进行初始化和设置,示例如下:
import BackgroundGeolocation from 'react-native-background-geolocation';
// 在上面的位置权限请求函数中的相应位置添加以下代码
BackgroundGeolocation.configure({
desiredAccuracy: BackgroundGeolocation.HIGH_ACCURACY,
stationaryRadius: 50,
distanceFilter: 50,
notificationTitle: 'Background tracking',
notificationText: 'enabled',
startOnBoot: false,
stopOnTerminate: true,
locationProvider: BackgroundGeolocation.DISTANCE_FILTER_PROVIDER,
interval: 10000,
fastestInterval: 5000,
activitiesInterval: 10000,
stopOnStillActivity: false,
url: 'http://yourserver.com/locations',
httpHeaders: {
'X-FOO': 'bar'
},
// 其他设置参数...
});
BackgroundGeolocation.start();
对于 Ionic,可以使用 cordova-plugin-mauron85-background-geolocation
插件进行初始化和设置,示例如下:
import { BackgroundGeolocation, BackgroundGeolocationConfig } from '@ionic-native/background-geolocation/ngx';
constructor(private backgroundGeolocation: BackgroundGeolocation) {}
// 在上面的位置权限请求函数中的相应位置添加以下代码
const config: BackgroundGeolocationConfig = {
desiredAccuracy: 0,
stationaryRadius: 50,
distanceFilter: 50,
notificationTitle: 'Background tracking',
notificationText: 'enabled',
startOnBoot: false,
stopOnTerminate: true,
locationProvider: BackgroundGeolocation.DISTANCE_FILTER_PROVIDER,
interval: 10000,
fastestInterval: 5000,
activitiesInterval: 10000,
stopOnStillActivity: false,
url: 'http://yourserver.com/locations',
httpHeaders: {
'X-FOO': 'bar'
},