Android实现控制第三方音乐播放器暂停/播放

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

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
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值