React native Can’;当应用程序处于后台状态时,不要让任何传感器工作[Expo(React Native)]

React native Can’;当应用程序处于后台状态时,不要让任何传感器工作[Expo(React Native)],react-native,expo,React Native,Expo,我正在运行SDK 39.0.0,并使用Expo为Android/iOS制作本机应用程序 到目前为止,一切进展顺利,但我偶然发现了一个问题: 我试图从一个传感器(准确地说是加速计)获取读数,它工作得非常好,但当应用程序是背景时就不行了 我已经尝试使用BackgroundFetch和TaskManager来实现这一点,但主要问题是我需要以正确的间隔(每100ms)从传感器获取数据,这在BackgroundFetch API中是不可能的 我在中找到了一个解决方法,它使用WebView组件在每个间隔(1

我正在运行SDK 39.0.0,并使用Expo为Android/iOS制作本机应用程序

到目前为止,一切进展顺利,但我偶然发现了一个问题: 我试图从一个传感器(准确地说是加速计)获取读数,它工作得非常好,但当应用程序是背景时就不行了

我已经尝试使用BackgroundFetchTaskManager来实现这一点,但主要问题是我需要以正确的间隔(每100ms)从传感器获取数据,这在BackgroundFetch API中是不可能的

我在中找到了一个解决方法,它使用WebView组件在每个间隔(100ms)持续运行一个函数。这确实有效(在前台和后台),我已经用
console.log
尝试过了,但是传感器侦听器
Accelerator.addListener()
当应用程序处于后台时,不会被调用对于使用BackgroundFetch的官方方法和使用WebView的非官方方法,都会发生这种情况。所以我猜传感器只是在后台不工作?

我希望有人能帮我解决这个问题,因为这个功能对我的期末项目非常重要。脱离世博会也不是一种选择。提前谢谢

以下是使后台任务成为可能的“变通”代码:

import*as React from'React';
从“react native WebView”导入{WebView};
导出默认函数BackgroundTask(道具){
返回(
{window.ReactNativeWebView.postMessage(“”;},${props.interval})
`,
}}
/>
);
}
}
以下是实现“变通”后台工作代码的代码(其中调用加速计并保存数据):

从“expo sensors”导入{Accelerator};
从“React”导入React,{useState,useffect};
从“../BackgroundWorkers/BackgroundTask”导入BackgroundTask;
导出默认函数BackgroundTaskTest(){
const[data,setData]=useState({});
useffect(()=>{
const AccelerSub=加速计.addListener((accelerometerData)=>{
设置数据(加速度计数据);
});
if(加速子系统){
返回函数cleanup(){
accelSub.remove();
};
}
});
const updateac=()=>console.log('Data:',Data.x,Data.y,Data.z);
/*这个返回的组件基本上不返回实际视图,它只是
不断重复updateAC()函数(前台和后台)*/
返回;
}

请记住,加速计在官方方法(使用BackgroundFetch)和非官方方法(使用上面显示的WebView方法)中都不起任何作用,而简单的
console.log()
在这两种方法中都起作用。因此,我的猜测是,传感器只是不在后台工作?

我对解决这个问题非常感兴趣。根据此GitHub问题,这是不受支持的:。如果有人能在世博会上做到这一点,我们甚至可能会为此制定预算。我对解决这一问题非常感兴趣。根据此GitHub问题,这是不受支持的:。如果有人能在世博会上做到这一点,我们甚至可以为此制定预算。