实现控制第三方音乐播放器思路:

1.参考方法:可能实现第三方音乐播放器暂停/播放/下一曲/上一曲

思路:android模拟发送键值,就像蓝牙耳机等远程设备切换歌曲操作,但是行不通。原因是现在Android系统中,InputManager中的injectInputEvent方法有/*@hide/标记,个人建议做产品,为了安全起见,还是不要费大力气用这个方法了。
这是以前见到过的做法:

import android.hardware.input.InputManager;  /** * 通过模拟KeyEvent触控事件来控制媒体音乐的播放 */private long mKeyRemappingSendFakeKeyDownTime;  private void keyRemappingSendFakeKeyEvent(int action, int keyCode) {       long eventTime = SystemClock.uptimeMillis();       if (action == KeyEvent.ACTION_DOWN) {             mKeyRemappingSendFakeKeyDownTime = eventTime;       }  KeyEvent keyEvent = new KeyEvent(mKeyRemappingSendFakeKeyDownTime, eventTime, action, keyCode, 0);  InputManager inputManager = (InputManager) mContext.getSystemService(Context.INPUT_SERVICE);          inputManager.injectInputEvent(keyEvent, InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);  }  

2.验证过方法:能够实现第三方音乐播放器暂停/播放功能

思路:写一个服务,当第三方播放器打开时 ,开启这个服务,音乐暂停;关闭服务,音乐继续

 // 实现原理:打开服务,第三方音乐暂停;关闭服务,第三音乐继续播放 // 关闭音乐播放服务 stopService(new Intent(MainActivity.this,MusicService.class)); // 开启音乐播放服务 startService(new Intent(MainActivity.this,MusicService.class));

音乐服务工具类:

public class MusicService extends Service {    private final String TAG = "MusicService";    /**     * 音频管理类     */    private AudioManager mAudioManager;    /**     * 是否播放音乐     */    private static boolean vIsActive=false;    /**     * 音乐监听器     */    private MyOnAudioFocusChangeListener mListener;    public int onStartCommand(Intent intent, int flags, int startId) {        Log.d(TAG, "onStartCommand");        // 获取系统音乐服务        mAudioManager = (AudioManager) getApplicationContext().getSystemService(                Context.AUDIO_SERVICE);        // 获取系统音乐服务状态        vIsActive=mAudioManager.isMusicActive();        mListener = new MyOnAudioFocusChangeListener();        if(vIsActive) {//播放状态            int result = mAudioManager.requestAudioFocus(mListener,                    AudioManager.STREAM_MUSIC,                    AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);            if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED)            {                Log.d(TAG, "requestAudioFocus successfully.");            }            else            {                Log.d(TAG, "requestAudioFocus failed.");            }        }        return super.onStartCommand(intent, flags, startId);    }    @Nullable    @Override    public IBinder onBind(Intent intent) {        return null;    }    @Override    public void onDestroy() {        // TODO Auto-generated method stub        super.onDestroy();        if(vIsActive)        {            mAudioManager.abandonAudioFocus(mListener);        }        Log.d(TAG, "onDestroy");    }    /**     * 内部类:音乐监听器     */    public class MyOnAudioFocusChangeListener implements AudioManager.OnAudioFocusChangeListener {        @Override        public void onAudioFocusChange(int focusChange) {            // TODO Auto-generated method stub        }    }}

更多相关文章

  1. Android中EditText光标在4.0中的bug及解决方法
  2. Android通信方式篇(一)-消息机制(Java层)
  3. Android(安卓)Hook 机制之简单实战
  4. Android(安卓)6.0 权限使用 以及小米手机权限的适配
  5. [置顶] Android(安卓)面试那些事之android基础
  6. Android(安卓)不可缺少的异步(Thread、Handler、AsyncTask)实例解
  7. android ListView拖动时会黑屏的解决方法
  8. Android(安卓)通过源码解析 Fragment 启动过程
  9. 【Android】_音乐列表_仿网易云音乐播放器2(读取本地mp3)

随机推荐

  1. Android中利用shape定制控件边框
  2. android:windowSoftInputMode="adjustRes
  3. android项目两种构建方式的整合(Eclipse/i
  4. 从 aar 到 Jcenter 看这篇就够了
  5. Android(安卓)webview使用漏洞案例解析
  6. android写一个Rxjava
  7. Chapter5-Android(安卓)Scroll 分析
  8. android线程、UI、AsyncTask
  9. 让Android飞!Google开始测试ART
  10. Android应用开发揭秘第3章笔记