网上有很多暂停背景音乐的例子,最多的就是根据暂停的指令去发广播来暂停音乐。其实这种方式很不靠谱,为什么?因为其他的播放器不一定注册监听了那个广播,所以大多数情况是不起作用的。
下面有一种比较靠谱的方式,是通过触发媒体的按钮来操作播放器状态。
sendMediaButton(context,KeyEvent.KEYCODE_MEDIA_PAUSE);
private static void sendMediaButton(Context context, int keyCode) {
KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_DOWN, keyCode);
Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
intent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent);
context.sendOrderedBroadcast(intent,null);
keyEvent = new KeyEvent(KeyEvent.ACTION_UP, keyCode);
intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
intent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent);
context.sendOrderedBroadcast(intent,null);
}
网友实现的另一种方法
简约写下流程
{
private Visualizer visualizer = null;//频谱测试器
private byte [] mRawVizData;//频谱容器
//实例化 Visualizer 对象
visualizer = new Visualizer(0);
mRawVizData = new byte[128];
//对象的初始化
if(visualizer != null)
{
if (visualizer.getEnabled()) {
visualizer.setEnabled(false);
}
visualizer.setCaptureSize(mRawVizData.length);//一定要在频谱false状态使用
visualizer.setEnabled(true);//开启频谱获取
}
下面是开一个线程进行循环获取频谱信息,我只把获取给贴出来
int status = Visualizer.ERROR;
if(visualizer != null)
{
//音乐频谱获取
status = visualizer.getFft(mRawVizData);//获取波形图
if(status != Visualizer.SUCCESS)
{
Log.i("answer", "getWaveFail");
}
else
{
int j = 0;
for(int i = 0; i < 128; i++)
{
if(mRawVizData[i] == 0)
{
j++;
}
}
Log.i("answer", "getWave j = " + j);
}
}
}