代码之家  ›  专栏  ›  技术社区  ›  pligosv

控制其他应用程序的音频播放

  •  0
  • pligosv  · 技术社区  · 6 年前

    我正在尝试编写应用程序来控制另一个应用程序的音频播放。

    例如:我在google play中听音乐,我的应用程序可以拦截对该音频流的控制。我不知道这会是小部件或前台服务与否,但我找不到信息如何检查音乐播放系统和如何获得访问控制它。

    我发现 MediaSession 我是说, MediaBrowserService 等等。但它的实现是在一个应用程序内创建服务,播放音乐背景,创建客户端部分作为i用户界面部分,并获得对auto、google助手等的访问。但我只想写客户端部分,获取当前播放音乐的信息,并编写一些小部件来自己控制它

    我可以用谷歌搜索什么来找到解决方案?

    1 回复  |  直到 6 年前
        1
  •  0
  •   pligosv    6 年前

    解决方法 Service extends NotificationListenerService

    使用的内部服务 MediaSessionManager MediaController

    MediaSessionManager mediaSessionManager;
    ComponentName componentName;
    MediaController controller;
    
    MediaSessionManager.OnActiveSessionsChangedListener sessionsChangedListener = new MediaSessionManager.OnActiveSessionsChangedListener() {
        @Override
        public void onActiveSessionsChanged(@Nullable List<MediaController> controllers) {
            Log.d(TAG, "onActiveSessionsChanged: session is changed");
            for (MediaController controller : controllers) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    Log.d(TAG, "onActiveSessionsChanged: controller = " + controller.getPackageName());
                    MediaMetadata meta = controller.getMetadata();
                    Log.d(TAG, "onCreate: artist = " + meta.getString(MediaMetadata.METADATA_KEY_ARTIST));
                    Log.d(TAG, "onCreate: song = " + meta.getString(MediaMetadata.METADATA_KEY_TITLE));
                }
            }
        }
    };
    
    @Override
    public void onCreate() {
        super.onCreate();
        componentName = new ComponentName(this, TestMediaService.class);
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            mediaSessionManager = (MediaSessionManager) getSystemService(Context.MEDIA_SESSION_SERVICE);
            mediaSessionManager.addOnActiveSessionsChangedListener(sessionsChangedListener, componentName);
    
            List<MediaController> controllers = mediaSessionManager.getActiveSessions(componentName);
            Log.d(TAG, "onCreate listener: controllers size = " + controllers.size());
            for (MediaController mediaController : controllers) {
                controller = mediaController;
                Log.d(TAG, "onCreate: controller = " + controller.getPackageName());
                MediaMetadata meta = controller.getMetadata();
                Log.d(TAG, "onCreate: artist = " + meta.getString(MediaMetadata.METADATA_KEY_ARTIST));
                Log.d(TAG, "onCreate: song = " + meta.getString(MediaMetadata.METADATA_KEY_TITLE));
            }
        }
    }