feat: continue music when app is closed

This commit is contained in:
2026-01-12 09:44:50 +01:00
parent eb820a149c
commit 85c6084351
5 changed files with 60 additions and 39 deletions
+2
View File
@@ -2,6 +2,7 @@
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
@@ -9,6 +10,7 @@
<uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.VIBRATE"/> <uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<queries> <queries>
<intent> <intent>
+6 -1
View File
@@ -37,6 +37,9 @@
], ],
"bundleIdentifier": "com.omedis.musicland.ai", "bundleIdentifier": "com.omedis.musicland.ai",
"infoPlist": { "infoPlist": {
"UIBackgroundModes": [
"audio"
],
"NSMicrophoneUsageDescription": "MusicLand uses the microphone to record your voice and audio so you can create and collaborate on music projects.", "NSMicrophoneUsageDescription": "MusicLand uses the microphone to record your voice and audio so you can create and collaborate on music projects.",
"UISupportedInterfaceOrientations": [ "UISupportedInterfaceOrientations": [
"UIInterfaceOrientationPortrait", "UIInterfaceOrientationPortrait",
@@ -73,7 +76,9 @@
"permissions": [ "permissions": [
"android.permission.CAMERA", "android.permission.CAMERA",
"android.permission.MODIFY_AUDIO_SETTINGS", "android.permission.MODIFY_AUDIO_SETTINGS",
"android.permission.POST_NOTIFICATIONS" "android.permission.POST_NOTIFICATIONS",
"android.permission.WAKE_LOCK",
"android.permission.FOREGROUND_SERVICE"
] ]
}, },
"web": { "web": {
-1
View File
@@ -55,7 +55,6 @@
"expo-linear-gradient": "~14.0.2", "expo-linear-gradient": "~14.0.2",
"expo-linking": "~7.0.5", "expo-linking": "~7.0.5",
"expo-location": "~18.0.10", "expo-location": "~18.0.10",
"expo-minuit-shake-report": "^0.1.1",
"expo-notifications": "~0.29.14", "expo-notifications": "~0.29.14",
"expo-sharing": "~13.0.1", "expo-sharing": "~13.0.1",
"expo-speech": "~13.0.1", "expo-speech": "~13.0.1",
+17 -1
View File
@@ -1,4 +1,8 @@
import { useAudioPlayer, useAudioPlayerStatus } from "expo-audio"; import {
setAudioModeAsync,
useAudioPlayer,
useAudioPlayerStatus,
} from "expo-audio";
import React, { import React, {
createContext, createContext,
useCallback, useCallback,
@@ -374,6 +378,18 @@ const PlayerProvider = ({ children }) => {
return Platform.OS === "web" ? ms : ms / 1000; return Platform.OS === "web" ? ms : ms / 1000;
}, []); }, []);
useEffect(() => {
setAudioModeAsync({
playsInSilentMode: true,
shouldPlayInBackground: true,
interruptionMode: "doNotMix",
allowsRecording: false,
shouldRouteThroughEarpiece: false,
}).catch((err) =>
console.warn("PlayerProvider: impossible de configurer le mode audio", err)
);
}, []);
useEffect(() => { useEffect(() => {
if (!status) return; if (!status) return;
+2 -3
View File
@@ -1,11 +1,10 @@
import React from "react"; import React from "react";
import { ShakeReportProvider } from "expo-minuit-shake-report";
import SharedProviders from "./SharedProviders"; import SharedProviders from "./SharedProviders";
export default ({ children }) => { export default ({ children }) => {
return ( return (
<ShakeReportProvider projectID="musicland" defaultEmail="user@email.com"> // <ShakeReportProvider projectID="musicland" defaultEmail="user@email.com">
<SharedProviders>{children}</SharedProviders> <SharedProviders>{children}</SharedProviders>
</ShakeReportProvider> // </ShakeReportProvider>
); );
}; };