blob: 81db32c8fc90612da35518a2e698efa0f7f84b26 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Required for all network calls (API, streaming). -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- Required by audio_service to keep audio playing when the app is in the
background. Without this the OS may kill the media playback process. -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!-- Required to declare mediaPlayback foreground service type on API 34+. -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
<!-- Prevents the CPU from sleeping while audio is actively playing. -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application
android:label="Player"
android:name="${applicationName}"
android:icon="@drawable/ic_launcher">
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:taskAffinity=""
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- Deep-link intent-filter for public share URLs.
When a user opens a link of the form
https://<PLAYER_HOST>/share/<token>
Android routes the intent to this activity and go_router
navigates to the ShareViewerScreen (/share/:token).
Replace PLAYER_HOST with the real server hostname (e.g.
player.example.com) for production deployments; the wildcard
host below accepts any host for development flexibility.
android:autoVerify="true" enables App Links (verified deep
links) once an assetlinks.json file is served at the host;
without verification the OS shows the disambiguation dialog.
Both http and https schemes are declared so links work with
self-signed or non-TLS development servers as well as
production HTTPS deployments. -->
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https"
android:host="PLAYER_HOST"
android:pathPattern="/share/.*" />
</intent-filter>
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http"
android:host="PLAYER_HOST"
android:pathPattern="/share/.*" />
</intent-filter>
</activity>
<meta-data
android:name="flutterEmbedding"
android:value="2" />
<!-- Disable Impeller on the x86_64 emulator: its OpenGL ES driver
does not support GL_EXT_shader_framebuffer_fetch, causing Impeller
to fail compiling blend-mode shaders. Skia renders correctly. -->
<meta-data
android:name="io.flutter.embedding.android.EnableImpeller"
android:value="false" />
<!-- audio_service background playback service.
android:foregroundServiceType="mediaPlayback" is mandatory on
Android 10+ (API 29+) to grant media-playback foreground service
privileges. This overrides the entry auto-merged from
audio_service's own manifest to explicitly pin the foreground
service type. Class names match audio_service 0.18.x internals. -->
<service
android:name="com.ryanheise.audioservice.AudioService"
android:exported="true"
android:foregroundServiceType="mediaPlayback">
<intent-filter>
<action android:name="android.media.browse.MediaBrowserService" />
</intent-filter>
</service>
<!-- Receives hardware media button events (headset play/pause, etc.)
and forwards them to audio_service. -->
<receiver
android:name="com.ryanheise.audioservice.MediaButtonReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
</application>
</manifest>
|