Android底层开发之APP音量单独控制

                       

Android底层开发之APP音量单独控制

目前Android的音乐播放软件都的音量控制都是随着系统的总Master音量变化的。想要实现和windows中一样,每个APP的媒体音量可以单独控制。

控制本APP音量

其实在MediaPlayer中就有一个API是设备当前音频流的音量的,叫setVolume()。通过编程测试,这个是独立于Master音量的。
这个问题搞定后,如果想要控制其它APP的音量,那么只要能拿到其MediaPlayer对象就好了。

控制其它APP音量

构思的是在MediaPlayer的构造函数中,将所有MediaPlayer对象保存到一个List中。

    private static List<MediaPlayer> list = new ArrayList<MediaPlayer>();    ...    public MediaPlayer() {        ...        /* Native setup requires a weak reference to our object.         * It's easier to create it here than in C++.         */        native_setup(new WeakReference<MediaPlayer>(this));        list.add(this);        Log.i("DEBUG_MEDIAPLAYER", "MediaPlayer() list.size=" + list.size() + list);    }    public static List<MediaPlayer> getList() {        return list;    }
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

发现在同一个应用中,如果new MediaPlayer还能够进行记录,但是在其它APP中new MediaPlayer会list会是一个新的对象,想要获取也是获取不到的。

03-06 04:54:23.945: I/DEBUG_MEDIAPLAYER(1016): MediaPlayer() list.size=1[com.android.music.MediaPlaybackService$CompatMediaPlayer@4163f850]03-06 04:56:26.535: I/DEBUG_MEDIAPLAYER(2013): MediaPlayer() list.size=1[android.media.MediaPlayer@41644388]03-06 04:56:26.595: I/DEBUG_MEDIAPLAYER(2013): MediaPlayer() list.size=2[android.media.MediaPlayer@41644388, android.media.MediaPlayer@41645128]03-06 04:56:33.155: I/DEBUG_MEDIAPLAYER(2050): MediaPlayer() list.size=1[android.media.MediaPlayer@4163d098]
   
   
  • 1
  • 2
  • 3
  • 4

那么就失败了,了解到原因是每个应用对于一个Dalvik Virtual Machine实例。就好比在Ubuntu打开了两个Eclipse,他们也是独立的。

(尽管是失败了,也把这个分析的过程分析记录一下)

其它:

百度音乐甚至都没有使用MediaPlayer,因为我在其构造器添加打印Log,使用百度音乐进行音乐播放时并没有看到有log打印。这一点十分奇怪。

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

猜你喜欢

转载自blog.csdn.net/hfyutdg/article/details/86438185