我正在尝试构建一个测试应用程序,如何在不使用 MEDIA_CONTENT_CONTROL 权限的情况下检测是否有任何其他应用程序正在播放音乐

问题描述

是否可以在没有系统权限的情况下通过通知侦听器检测任何正在播放的音乐 这是我的代码,请帮助我,我无法获得任何其他应用程序的播放状态,我不需要控制音乐,我只需要检测音乐播放状态。我不确定是否有任何方法可以通过通知侦听器来做到这一点

  private void Mediastate(){
        MediaSessionManager mSessionManager = (MediaSessionManager) this.getSystemService(Context.MEDIA_SESSION_SERVICE);
        List<MediaController> controllers;
        controllers = mSessionManager.getActiveSessions(new ComponentName(this,NotificationListener.class));
        Log.v(TAG,"found " + controllers.size() + " controllers");
        Log.d(TAG," Mediastate");
        final MediaControllerCallback callback1 = new MediaControllerCallback();

        if(controllers.size() != 0) {
            mHandler = new Handler(Looper.getMainLooper());
            mMediaController1 = controllers.get(0);
            mMediaController1.registerCallback(callback1,mHandler);
            Log.d(TAG," controller sixe 0");
        }else{
            //showNotification("test",getApplicationContext());
            Log.i(TAG,"notification is 0");
            //Toast.makeText(mContext,"no music app running!!!",Toast.LENGTH_LONG).show();

        }

    }

this is the call back
    private class MediaControllerCallback extends MediaController.Callback {
        @Override
        public void onPlaybackStateChanged(PlaybackState state) {
            Log.v(TAG," onPlaybackStateChanged: " + state.getState());
            if (state.getState() == PlaybackState.STATE_PLAYING ){
                Log.d(TAG," song is playing");`enter code here`
                //startAdvertising(NOTIFICATION,7000);
            }else if (state.getState()== PlaybackState.STATE_PAUSED){
                Log.d(TAG," stopped pause");
                //stopAdvertising();
            }
        }
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)