You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android(minSDK=26)如何不离开应用调用后台默认播放器播放歌曲

解决方案

你的代码使用ACTION_VIEW会触发音乐播放器的UI界面启动,要实现后台调用已运行的默认音乐播放器播放,可通过以下两种方式处理:

方法一:更换播放Intent Action

使用专门的媒体播放Action替代ACTION_VIEW,避免唤起播放器UI:

Intent intent = new Intent("android.media.action.MEDIA_PLAY");
Uri uri = FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".provider", new File(path));
intent.setDataAndType(uri, "audio/*");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(intent);

这个Action会请求已运行的媒体播放器直接处理播放请求,多数主流播放器会在后台响应而不弹出界面。

方法二:通过MediaController控制已活跃的媒体会话

如果方法一无效,可直接控制已在后台运行的默认音乐播放器的媒体会话,前提是播放器已启动并维持前台服务:

  1. 先在AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" />
  1. 编写代码获取并控制目标播放器的会话:
MediaSessionManager mediaSessionManager = (MediaSessionManager) getSystemService(Context.MEDIA_SESSION_SERVICE);
Uri uri = FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".provider", new File(path));

// 获取当前活跃的媒体会话列表
List<MediaSession.Token> activeSessions = mediaSessionManager.getActiveSessions(null);
for (MediaSession.Token token : activeSessions) {
    MediaController mediaController = new MediaController(this, token);
    // 验证是否为默认音乐播放器
    if (isDefaultMediaPlayer(mediaController.getPackageName())) {
        // 发送播放指定Uri的指令
        mediaController.getTransportControls().playFromUri(uri, null);
        break;
    }
}

// 判断包名是否为默认音乐播放器的工具方法
private boolean isDefaultMediaPlayer(String targetPackage) {
    Intent testIntent = new Intent(Intent.ACTION_VIEW);
    testIntent.setType("audio/*");
    ResolveInfo resolveInfo = getPackageManager().resolveActivity(testIntent, PackageManager.MATCH_DEFAULT_ONLY);
    return resolveInfo != null && resolveInfo.activityInfo.packageName.equals(targetPackage);
}

这种方式直接操控已运行播放器的媒体控制逻辑,完全不会唤起UI界面,但需要播放器支持playFromUri指令(主流播放器均支持)。

注意事项:

  • 确保FileProvider配置正确,外部存储文件需有对应读取权限(Android 10+建议使用Scoped Storage或申请MANAGE_EXTERNAL_STORAGE权限)
  • 若默认播放器未在后台运行,上述方法可能无法生效,需额外处理启动逻辑

内容的提问来源于stack exchange,提问作者slowcoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 17:53:13