我正在react native expo项目(后台获取时间)上工作



我得到了一次时间。有时我也不明白。我需要背景时间。一旦我启动取回背景按钮,它应该在控制台中给出时间,直到我停止取回背景。我使用expo后台取回和任务管理器来获取后台时间。我正面临着一个问题,它不断抓取时间,所以请帮助我这个编码。文档在expo文档中。

import * as BackgroundFetch from 'expo-background-fetch';
import * as TaskManager from 'expo-task-manager';

const BACKGROUND_FETCH_TASK = 'background-fetch1';
const now = Date.now();
console.log(`Got background fetch call at**** date: ${new Date(now).toISOString()}`);
// Be sure to return the successful result type!
return BackgroundFetch.Result.NewData;
});
async function registerBackgroundFetchAsync() {
const now = Date.now();
console.log(`Registered**** date: ${new Date(now).toISOString()}`);
console.log(" registered ");
return BackgroundFetch.registerTaskAsync(BACKGROUND_FETCH_TASK, {
minimumInterval: 60 * 15, // 30 sec
stopOnTerminate: false, // android only,
startOnBoot: true, // android only
});
}
async function unregisterBackgroundFetchAsync() {
console.log("un registered ");
const now = Date.now();
console.log(`Un registered fetch call at**** date: ${new Date(now).toISOString()}`);
return BackgroundFetch.unregisterTaskAsync(BACKGROUND_FETCH_TASK);
}

const TrackScreen = ({ navigation }) => {
const { state, clearError, fetchContactsforTrack } = useContext(TrackContext);
const [isRegistered, setIsRegistered] = useState(false);
const [status, setStatus] =useState(BackgroundFetch.Status);

// Clear error if any
useEffect(() => {
checkStatusAsync();  

const unsubscribe = navigation.addListener('focus', () => {
clearError();

});
return unsubscribe;
}, [navigation, clearError]);
/* Stop the backgroud tracking */
const stopTracking=()=>{

}
/* Stop the backgroud tracking */
const startTracking=(track)=>{
var  trackdata= fetchContactsforTrack(track)

}
const checkStatusAsync = async () => {
const status = await BackgroundFetch.getStatusAsync();
const isRegistered = await TaskManager.isTaskRegisteredAsync(BACKGROUND_FETCH_TASK);
const now = Date.now();
console.log(`Checking statuscall at**** date: ${new Date(now).toISOString()}`);
console.log("-------------"+status);
console.log("-------------"+isRegistered);
console.log("-------------"+JSON.stringify(BackgroundFetch));
setStatus(status);
setIsRegistered(isRegistered);
};
const toggleFetchTask = async () => {
if (isRegistered) {
await unregisterBackgroundFetchAsync();
} else {        
await registerBackgroundFetchAsync();
await BackgroundFetch.setMinimumIntervalAsync(.5);
}
checkStatusAsync();
};

return (

<View >
<View >
<Text>
Background fetch status:{' '}
<Text >{status ? BackgroundFetch.Status[status] : null}</Text>
</Text>
<Text>
Background fetch task name:{' '}
<Text >
{isRegistered ? BACKGROUND_FETCH_TASK : 'Not registered yet!'}
</Text>
</Text>
</View>
<View ></View>
<Button
title={isRegistered ? 'Unregister BackgroundFetch task' : 'Register BackgroundFetch task'}
onPress={toggleFetchTask}
/>
</View>
);
this is my code

您的函数可能不会在一秒钟左右后立即运行。这是因为最小的时间间隔是15分钟。如果间隔值小于最小值,Android会自动切换为15分钟。

可能会有帮助- https://proandroiddev.com/android-restrictions-you-may-encounter-during-development-process-c39ede513813

最新更新