Android平台如何暂停音频程序?求实现Youtube Music与系统音乐暂停恢复的Java代码
实现Youtube Music与Android Music的暂停/恢复功能(基于MediaController)
前提配置
首先在AndroidManifest.xml中添加必要的权限和包可见性声明,确保能访问目标音乐应用:
<!-- 基础媒体控制权限 --> <uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" /> <!-- Android 13+ 需要通知权限才能控制媒体 --> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <!-- Android 11+ 包可见性配置,指定目标应用 --> <queries> <package android:name="com.google.android.music" /> <!-- Android Music --> <package android:name="com.google.android.apps.youtube.music" /> <!-- Youtube Music --> </queries>
核心代码实现
下面是一个工具类,封装了针对指定音乐应用的暂停/恢复逻辑:
import android.content.Context; import android.media.session.MediaController; import android.media.session.MediaSessionManager; import android.os.Build; import android.util.Log; import java.util.List; public class MusicControlHelper { private static final String TAG = "MusicControlHelper"; // 暂停指定包名的音乐应用 public static void pauseAppMusic(Context context, String targetPackage) { controlMusic(context, targetPackage, true); } // 恢复指定包名的音乐应用 public static void resumeAppMusic(Context context, String targetPackage) { controlMusic(context, targetPackage, false); } private static void controlMusic(Context context, String targetPackage, boolean isPause) { MediaSessionManager sessionManager = (MediaSessionManager) context.getSystemService(Context.MEDIA_SESSION_SERVICE); if (sessionManager == null) { Log.e(TAG, "MediaSessionManager not available"); return; } List<MediaController> controllers; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { controllers = sessionManager.getActiveSessions(null); } else { controllers = sessionManager.getActiveSessions(null); // 兼容低版本,参数可为null } for (MediaController controller : controllers) { String packageName = controller.getPackageName(); if (targetPackage.equals(packageName)) { if (isPause) { controller.getTransportControls().pause(); Log.d(TAG, "Paused: " + targetPackage); } else { controller.getTransportControls().play(); Log.d(TAG, "Resumed: " + targetPackage); } return; } } Log.w(TAG, targetPackage + " is not active or not found"); } }
使用示例
在Activity或Fragment中直接调用工具类方法即可:
// 暂停Youtube Music MusicControlHelper.pauseAppMusic(this, "com.google.android.apps.youtube.music"); // 恢复Android Music MusicControlHelper.resumeAppMusic(this, "com.google.android.music");
注意事项
- 权限动态申请:Android 13+ 需要动态申请
POST_NOTIFICATIONS权限,否则无法正常控制媒体;部分设备可能需要额外申请MEDIA_CONTENT_CONTROL的动态权限。 - 应用活跃性:只有当目标音乐应用处于活跃状态(正在播放或后台运行)时,才能找到对应的
MediaController并执行控制操作。 - 版本兼容:代码适配了Android Q及以上版本,低版本系统可能需要调整
getActiveSessions的参数(可传入ComponentName,但通常null即可)。
内容的提问来源于stack exchange,提问作者learner coder
相关产品推荐
相关产品推荐

