首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >安卓MediaPlayer -如何在STREAM_ALARM中玩?

安卓MediaPlayer -如何在STREAM_ALARM中玩?
EN

Stack Overflow用户
提问于 2011-08-14 21:36:28
回答 4查看 10K关注 0票数 15

我已经尝试使用以下代码在我的应用程序中设置媒体播放器的音频流,但是当我这样做时,我在模拟器中听不到声音。如果我没有为播放器设置流,那么音频就会正常播放。我确定我用错了,但是我不能解决这个问题,有什么帮助吗?

MediaPlayer player = MediaPlayer.create(getApplicationContext(), R.raw.test_audio);

AudioManager audioManager = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE);
audioManager.getStreamVolume(AudioManager.STREAM_ALARM);
audioManager.setStreamVolume(AudioManager.STREAM_ALARM, audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM), AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
player.setAudioStreamType(AudioManager.STREAM_ALARM);
player.start();

注意:我已经将MODIFY_AUDIO_SETTINGS权限添加到我的清单中。

谢谢!

EN

回答 4

Stack Overflow用户

发布于 2017-01-04 08:38:50

问题是您正在使用MediaPlayer.create()创建您的MediaPlayer。Create函数调用prepare()函数,该函数定版您的媒体,并且不允许您更改AudioStreamType

解决方案是使用setDataSource而不是create

MediaPlayer mp = new MediaPlayer();
mp.setAudioStreamType(AudioManager.STREAM_ALARM);
mp.setLooping(true);
try {
   mp.setDataSource(getApplicationContext(), yourAudioUri);
   mp.prepare();
} catch (IOException e) {
   e.printStackTrace();
}
mp.start();

有关详细信息,请参阅this link

票数 6
EN

Stack Overflow用户

发布于 2013-07-17 19:21:57

setAudioStreamType(整型流类型)

必须在prepare()之前调用此方法;

MediaPlayer.create(Context context,int resid)

如果成功,prepare()将已经被调用,并且不能再被调用。

票数 2
EN

Stack Overflow用户

发布于 2018-06-16 04:04:23

这里的解决方案在API 22中已被弃用

我打开了我自己的thread来解决这个问题。

这是一个更新的工作解决方案。

mediaPlayerScan = new MediaPlayer();
try {
  mediaPlayerScan.setDataSource(getContext(),
          Uri.parse(getString(R.string.res_path) + R.raw.scan_beep));

  if (Build.VERSION.SDK_INT >= 21) {
    mediaPlayerScan.setAudioAttributes(new AudioAttributes.Builder()
            .setUsage(AudioAttributes.USAGE_ALARM)
            .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
            .build());
  } else {
    mediaPlayerScan.setAudioStreamType(AudioManager.STREAM_ALARM);
  }
  mediaPlayerScan.prepare();
} catch (IOException e) {
  e.printStackTrace();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7057115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档