Я пытаюсь считывать данные акселерометра телефона Android каждые 5 секунд и записывать данные в файл 24 часа в сутки, 7 дней в неделю. Он должен иметь возможность работать в фоновом режиме. Я использую React Native с управляемой разработкой Expo.
Я работаю на телефоне Galaxy A13 с целевым SDK Android OS 14: 35.
Он работает нормально, пока приложение находится на переднем плане. Но как только приложение переходит в фоновый режим, оно перестает выполнять вход в файл.
Некоторые предлагали мне использовать службы Foreground, но они не должны быть знакомы с headless js и React-native-background-actions, которые делают именно это.
Моя частота дискретизации слишком высока? Я попробовал 15 минут и происходит то же самое. Я заметил, что другие фоновые библиотеки (expo-background-task и response-native-background-fetch) ограничивают время 15 минутами (а не 5 секундами). Но я не вижу никаких ограничений в документации для реагирования-native-background-actionsb. Не работают ли реакции-родные-фоновые действия с новой архитектурой? Нужны ли мне дополнительные разрешения? Заранее благодарим за помощь!
Вот образец файла журнала, когда я выключаю приложение с переднего плана всего на несколько секунд:
2026-01-01 12:06:00: App mounted. Initial State: active
2026-01-01 12:06:02: App went to BACKGROUND (background)
2026-01-01 12:06:02: App came to FOREGROUND
2026-01-01 12:06:07: [BackgroundAccelerometerTask] 12:06:07 PM - x: 0.433, y: 0.290, z: 0.830
2026-01-01 12:06:12: [BackgroundAccelerometerTask] 12:06:12 PM - x: 0.314, y: 0.131, z: 0.879
2026-01-01 12:06:17: [BackgroundAccelerometerTask] 12:06:17 PM - x: 0.470, y: 0.101, z: 0.936
2026-01-01 12:06:22: [BackgroundAccelerometerTask] 12:06:22 PM - x: 0.482, y: 0.105, z: 0.850
2026-01-01 12:06:27: [BackgroundAccelerometerTask] 12:06:27 PM - x: 0.506, y: 0.110, z: 0.939
2026-01-01 12:06:32: [BackgroundAccelerometerTask] 12:06:32 PM - x: 0.553, y: 0.222, z: 0.946
2026-01-01 **12:06:32**: App went to BACKGROUND (background)
2026-01-01 **12:06:55**: App came to FOREGROUND
2026-01-01 12:06:55: [BackgroundAccelerometerTask] 12:06:55 PM - x: 0.534, y: 0.218, z: 0.793
2026-01-01 12:07:00: [BackgroundAccelerometerTask] 12:07:00 PM - x: 0.024, y: 0.072, z: 0.990
Я использую экспо-сенсоры и реагирующие фоновые действия.
Я использую реагирующую нативную версию 0.81.5; выставка 54.0.29; экспо-сенсоры 15.0.8; реакции-native-background-actions 4.0.1.
Вот как фоновая задача инициализируется на главном экране:
await BackgroundService.start(BackgroundAccelerometerTask, options);
...
const options = {
taskName: "BackgroundAccelerometerTask",
taskTitle: "Tracking Movement",
taskDesc: "Getting accelerometer data in the background",
taskIcon: {
name: "ic_launcher", // Make sure you have this icon in your Android mipmap folders
type: "mipmap",
},
color: "#ff00ff",
parameters: {
delay: 1000,
},
};
Вот фоновая задача
import BackgroundService from "react-native-background-actions";
import { Accelerometer } from "expo-sensors";
import LogService from "./LogService";
// Use react-native-sensors if not using Expo:
// import { Accelerometer } from 'react-native-sensors';
const sleep = (time) =>
new Promise((resolve) => setTimeout(() => resolve(), time));
const BackgroundAccelerometerTask = async (taskDataArguments) => {
// Example of storing data or doing something with it
const { delay } = taskDataArguments;
await new Promise(async (resolve) => {
// Set update interval (e.g., 5000ms)
Accelerometer.setUpdateInterval(5000);
const subscription = Accelerometer.addListener((accelerometerData) => {
// Process accelerometer data here
//console.log("Accelerometer data in background:", accelerometerData);
const localTime = new Date().toLocaleTimeString();
console.log(
"Accelerometer data in background:",
localTime,
accelerometerData.x,
accelerometerData.y,
accelerometerData.z
);
LogService.append(
`[BackgroundAccelerometerTask] ${localTime} - x: ${accelerometerData.x.toFixed(
3
)}, y: ${accelerometerData.y.toFixed(
3
)}, z: ${accelerometerData.z.toFixed(3)}`
);
});
// Keep the task running as long as needed.
// Note: On iOS, this will only run for a short time unless
// you enable specific background modes like 'location' or 'audio'.
// For Android, it can run as a foreground service indefinitely.
for (let i = 0; BackgroundService.isRunning(); i++) {
if (i % 10 === 0)
console.log(`[BackgroundAccelerometerTask] Heartbeat ${i}`);
await sleep(delay);
}
// Don't forget to remove the listener when the task stops
subscription.remove();
resolve();
});
};
export default BackgroundAccelerometerTask;
Вот разрешения, которые я использовал в AndroidManifest.xml
Подробнее здесь: https://stackoverflow.com/questions/798 ... eact-nativ
Почему я не могу получить фоновую задачу для регистрации данных в фоновом режиме в React Native, используя реакции-nativ ⇐ Android
Форум для тех, кто программирует под Android
1769205419
Anonymous
Я пытаюсь считывать данные акселерометра телефона Android каждые 5 секунд и записывать данные в файл 24 часа в сутки, 7 дней в неделю. Он должен иметь возможность работать в фоновом режиме. Я использую React Native с управляемой разработкой Expo.
Я работаю на телефоне Galaxy A13 с целевым SDK Android OS 14: 35.
Он работает нормально, пока приложение находится на переднем плане. Но как только приложение переходит в фоновый режим, оно перестает выполнять вход в файл.
Некоторые предлагали мне использовать службы Foreground, но они не должны быть знакомы с headless js и React-native-background-actions, которые делают именно это.
Моя частота дискретизации слишком высока? Я попробовал 15 минут и происходит то же самое. Я заметил, что другие фоновые библиотеки (expo-background-task и response-native-background-fetch) ограничивают время 15 минутами (а не 5 секундами). Но я не вижу никаких ограничений в документации для реагирования-native-background-actionsb. Не работают ли реакции-родные-фоновые действия с новой архитектурой? Нужны ли мне дополнительные разрешения? Заранее благодарим за помощь!
Вот образец файла журнала, когда я выключаю приложение с переднего плана всего на несколько секунд:
2026-01-01 12:06:00: App mounted. Initial State: active
2026-01-01 12:06:02: App went to BACKGROUND (background)
2026-01-01 12:06:02: App came to FOREGROUND
2026-01-01 12:06:07: [BackgroundAccelerometerTask] 12:06:07 PM - x: 0.433, y: 0.290, z: 0.830
2026-01-01 12:06:12: [BackgroundAccelerometerTask] 12:06:12 PM - x: 0.314, y: 0.131, z: 0.879
2026-01-01 12:06:17: [BackgroundAccelerometerTask] 12:06:17 PM - x: 0.470, y: 0.101, z: 0.936
2026-01-01 12:06:22: [BackgroundAccelerometerTask] 12:06:22 PM - x: 0.482, y: 0.105, z: 0.850
2026-01-01 12:06:27: [BackgroundAccelerometerTask] 12:06:27 PM - x: 0.506, y: 0.110, z: 0.939
2026-01-01 12:06:32: [BackgroundAccelerometerTask] 12:06:32 PM - x: 0.553, y: 0.222, z: 0.946
2026-01-01 **12:06:32**: App went to BACKGROUND (background)
2026-01-01 **12:06:55**: App came to FOREGROUND
2026-01-01 12:06:55: [BackgroundAccelerometerTask] 12:06:55 PM - x: 0.534, y: 0.218, z: 0.793
2026-01-01 12:07:00: [BackgroundAccelerometerTask] 12:07:00 PM - x: 0.024, y: 0.072, z: 0.990
Я использую экспо-сенсоры и реагирующие фоновые действия.
Я использую реагирующую нативную версию 0.81.5; выставка 54.0.29; экспо-сенсоры 15.0.8; реакции-native-background-actions 4.0.1.
Вот как фоновая задача инициализируется на главном экране:
await BackgroundService.start(BackgroundAccelerometerTask, options);
...
const options = {
taskName: "BackgroundAccelerometerTask",
taskTitle: "Tracking Movement",
taskDesc: "Getting accelerometer data in the background",
taskIcon: {
name: "ic_launcher", // Make sure you have this icon in your Android mipmap folders
type: "mipmap",
},
color: "#ff00ff",
parameters: {
delay: 1000,
},
};
Вот фоновая задача
import BackgroundService from "react-native-background-actions";
import { Accelerometer } from "expo-sensors";
import LogService from "./LogService";
// Use react-native-sensors if not using Expo:
// import { Accelerometer } from 'react-native-sensors';
const sleep = (time) =>
new Promise((resolve) => setTimeout(() => resolve(), time));
const BackgroundAccelerometerTask = async (taskDataArguments) => {
// Example of storing data or doing something with it
const { delay } = taskDataArguments;
await new Promise(async (resolve) => {
// Set update interval (e.g., 5000ms)
Accelerometer.setUpdateInterval(5000);
const subscription = Accelerometer.addListener((accelerometerData) => {
// Process accelerometer data here
//console.log("Accelerometer data in background:", accelerometerData);
const localTime = new Date().toLocaleTimeString();
console.log(
"Accelerometer data in background:",
localTime,
accelerometerData.x,
accelerometerData.y,
accelerometerData.z
);
LogService.append(
`[BackgroundAccelerometerTask] ${localTime} - x: ${accelerometerData.x.toFixed(
3
)}, y: ${accelerometerData.y.toFixed(
3
)}, z: ${accelerometerData.z.toFixed(3)}`
);
});
// Keep the task running as long as needed.
// Note: On iOS, this will only run for a short time unless
// you enable specific background modes like 'location' or 'audio'.
// For Android, it can run as a foreground service indefinitely.
for (let i = 0; BackgroundService.isRunning(); i++) {
if (i % 10 === 0)
console.log(`[BackgroundAccelerometerTask] Heartbeat ${i}`);
await sleep(delay);
}
// Don't forget to remove the listener when the task stops
subscription.remove();
resolve();
});
};
export default BackgroundAccelerometerTask;
Вот разрешения, которые я использовал в AndroidManifest.xml
Подробнее здесь: [url]https://stackoverflow.com/questions/79858727/why-cant-i-get-a-background-task-to-log-data-while-in-background-in-react-nativ[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия