控制其他应用的音频播放

时间:2018-07-13 13:42:42

标签: android audio listener

我正在尝试编写应用程序以控制其他应用程序的音频播放。

例如:我在Google Play中听音乐,而我的应用可以拦截对此音频流的控制。我不知道会不会是带有通知的窗口小部件或前台服务,但是我找不到有关如何检查系统中是否正在播放音乐以及如何获得对其进行控制的信息。

我找到了MediaSessionMediaBrowserService等。但这是关于在一个应用程序内部实现的,该应用程序具有创建服务以播放音乐背景并将客户端部分创建为i UI部分并获得对Auto,Google Assistant等的访问权限。但是我只想编写客户端部分,获取有关当前正在播放音乐的信息,并编写一些小部件来由我自己控制

我可以通过谷歌找到解决方案吗?

1 个答案:

答案 0 :(得分:0)

已解决Service extends NotificationListenerService

在服务范围内使用了MediaSessionManagerMediaController

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));
        }
    }
}