P3-Liste aus dem UX-Review: Player nimmt Cover-Farbe auf, "Teilen" aus YouTube trägt die Adresse in den Downloader ein, Android Auto blättert durch die Bibliothek, Laufweite der Typografie geschärft, Überschriften vereinheitlicht. 533 Tests grün, flutter analyze ohne Befund.
98 lines
5.2 KiB
XML
98 lines
5.2 KiB
XML
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
|
<!-- Netzwerk: Flutter injiziert INTERNET nur in Debug-/Profile-Builds.
|
|
Ohne diesen Eintrag hat das Release-APK keinerlei Netzzugriff
|
|
(kein Navidrome-Login, kein Log-Upload). -->
|
|
<uses-permission android:name="android.permission.INTERNET"/>
|
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
|
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"/>
|
|
<uses-permission android:name="android.permission.WAKE_LOCK"/>
|
|
<!-- Equalizer/Bass/Virtualizer (android.media.audiofx) -->
|
|
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
|
|
<!-- Wiedergabe-Benachrichtigung: ab Android 13 (API 33) verlangt das System
|
|
dafuer eine Laufzeit-Berechtigung. Ohne sie laeuft der Vordergrunddienst
|
|
zwar, aber Notification und Bedienknoepfe darin bleiben unsichtbar. -->
|
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
|
|
<!-- Musikerkennung: kurze Aufnahme ueber das Mikrofon fuer ACRCloud. -->
|
|
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
|
|
<!-- Musik lesen: Android 13+ (API 33) nutzt READ_MEDIA_AUDIO, ältere READ_EXTERNAL_STORAGE. -->
|
|
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
|
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
|
|
android:maxSdkVersion="32"/>
|
|
<!-- Heruntergeladene Musik in Music/Melo ablegen. Ab Android 10 uebernimmt
|
|
das der MediaStore ohne Berechtigung, davor braucht es Schreibrechte. -->
|
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
|
android:maxSdkVersion="28"/>
|
|
<application
|
|
android:label="melo"
|
|
android:name="${applicationName}"
|
|
android:icon="@mipmap/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">
|
|
<!-- Specifies an Android theme to apply to this Activity as soon as
|
|
the Android process has started. This theme is visible to the user
|
|
while the Flutter UI initializes. After that, this theme continues
|
|
to determine the Window background behind the Flutter UI. -->
|
|
<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>
|
|
<!-- "Teilen -> Melo" aus der YouTube-App. Vorher musste man die
|
|
Adresse von Hand kopieren und einfuegen. -->
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.SEND"/>
|
|
<category android:name="android.intent.category.DEFAULT"/>
|
|
<data android:mimeType="text/plain"/>
|
|
</intent-filter>
|
|
</activity>
|
|
<!-- Don't delete the meta-data below.
|
|
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
|
|
<meta-data
|
|
android:name="flutterEmbedding"
|
|
android:value="2" />
|
|
<!-- Android Auto: ohne diesen Eintrag taucht Melo dort nicht auf,
|
|
auch wenn der MediaBrowserService unten angemeldet ist. Die
|
|
Inhalte liefert MeloAudioHandler.getChildren. -->
|
|
<meta-data
|
|
android:name="com.google.android.gms.car.application"
|
|
android:resource="@xml/automotive_app_desc"/>
|
|
<service
|
|
android:name="com.ryanheise.audioservice.AudioService"
|
|
android:foregroundServiceType="mediaPlayback"
|
|
android:exported="true">
|
|
<intent-filter>
|
|
<action android:name="android.media.browse.MediaBrowserService" />
|
|
</intent-filter>
|
|
</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>
|
|
<!-- Required to query activities that can process text, see:
|
|
https://developer.android.com/training/package-visibility and
|
|
https://developer.android.com/reference/android/content/Intent#ACTION_PROCESS_TEXT.
|
|
|
|
In particular, this is used by the Flutter engine in io.flutter.plugin.text.ProcessTextPlugin. -->
|
|
<queries>
|
|
<intent>
|
|
<action android:name="android.intent.action.PROCESS_TEXT"/>
|
|
<data android:mimeType="text/plain"/>
|
|
</intent>
|
|
</queries>
|
|
</manifest>
|