跳转至

apps\player\src\main\AndroidManifest.xml

源码路径:apps\player\src\main\AndroidManifest.xml · 59 行

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 播放服务要挂前台;mediaPlayback 是 Android 14 要求的类型声明 -->
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
    <!-- 音频焦点/媒体键由 MediaSession 处理,但需要这条来接收媒体键广播 -->
    <uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />

    <application
        android:name=".PlayerApp"
        android:label="NFarms Player"
        android:icon="@mipmap/ic_launcher"
        android:allowBackup="false"
        android:theme="@style/Theme.Nfarms">

        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:configChanges="orientation|screenSize|keyboardHidden|uiMode"
            android:theme="@style/Theme.Nfarms">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- MediaSessionService 自己会 startForeground,不用我们再写通知 -->
        <service
            android:name=".play.PlaybackService"
            android:exported="true"
            android:foregroundServiceType="mediaPlayback">
            <intent-filter>
                <action android:name="androidx.media3.session.MediaSessionService" />
                <action android:name="android.media.browse.MediaBrowserService" />
            </intent-filter>
        </service>

        <!--
          媒体按键接收器 —— **没有它,耳机/蓝牙的播放暂停键不生效**。
          MediaSessionCompat 会打印
            "Couldn't find a unique registered media button receiver"
          然后静默忽略所有媒体键;而系统在 App 被杀、MediaSession 还没重建时
          也需要一个接收器把 ACTION_MEDIA_BUTTON 转发回服务。
          这个类由 media3-session 提供,声明在清单里即可,不用写代码。
        -->
        <receiver
            android:name="androidx.media3.session.MediaButtonReceiver"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MEDIA_BUTTON" />
            </intent-filter>
        </receiver>
    </application>
</manifest>