0

我有时间一次。有时我也不明白。我需要后台时间。如果我开始获取背景按钮,它应该在控制台中给出时间,直到我停止获取背景。我使用 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
4

0 回答 0