Articles of android audiomanager

获取连接音频设备列表的android api是什么?

我使用下面添加的代码来获取Android设备的连接音频设备。 使用了AudioManager api方法getDevices()并通过耳机,扬声器,耳机等连接设备获得了结果。 但是这个getDevices()方法仅在android api level 23(Marshmallow)之后可用。 但我的应用程序应该支持api level 21(Lollipop)。 请任何人都可以告诉我替代api获取Android设备的可用音频设备。 与api级别23一起使用的代码。 AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { AudioDeviceInfo[] adi = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS); } 请帮助我为Marshmallow(api level 23)下的Android OS版本运行的设备提供连接的音频设备。

Android 5.0中的AudioManager.setRingerMode()替代方案(API 21)

我使用AudioManager.setRingerMode()来处理我的应用程序中的设备卷: AudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT)关闭振动和声音。 AudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE)关闭声音并打开振动。 AudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL)打开声音并打开振动。 换句话说,我能够控制设备音量并达到所有“模式”。 但是,仅使用AudioManager.setRingerMode无法在Android 5.0中处理所有设备音量模式。 根据文件 : 将设备设置为RINGER_MODE_SILENT会导致设备进入新的优先级模式。 如果将设置设置为RINGER_MODE_NORMAL或RINGER_MODE_VIBRATE,设备将保留优先模式。 如何处理Android 5.0中的所有模式(无,优先级振动,优先级声音,所有振动,所有声音)设备音量?

寻找新的Android API setMediaButtonReceiver的示例

目前我正在使用 mAudioManager.registerMediaButtonEventReceiver(mRemoteControlResponder); 但现在在5.0中已弃用,并由setMediaButtonReceiver取代。 谷歌有5个链接都指向developer.android.com。 还有人用过这个吗? 如果是这样,你能提供一个例子吗?

Android – 如何获取AudioManager / AudioSystem参数列表

AudioManager有一个setParameters方法,它接受字符串表示中的键值对(“parameter_name = parameter_value”)。 在内部,它调用本机AudioSystem.setParameters 。 获取参数值的唯一方法是,如果您知道它的名称,可以通过调用AudioManager.getParameters方法来调用`AudioSystem’中相应的本机方法。 有没有办法(使用reflection或其他技术)获得支持的参数列表(当然结果将取决于它被调用的设备,因为它是特定于平台的)?

从服务调用setVolumeControlStream

我需要从一个通过STREAM_SYSTEM播放声音的服务调用setVolumeControlStream 。 显然在一个没有问题的Activity中,但是如何使用服务呢?

如何为特定来电提供定制振动

该程序的function如下:用户有一个电话号码列表,只有当没有其他系统范围的应用程序提供振动时(例如静音模式),手机才能在来电时振动。 我知道这是违反规则的,因为应用程序应该尊重用户的设置,但应用程序仅限于某些具有此需求的用户。 我尝试了两种方法,但它们都不令人满意: 收听电话状态并使用我自己的模式直接触发振动服务(使用Vibrator.vibrate() )。 当手机处于CALL_STATE_RINGING状态时,此方法有效,没有来电但随机有效,我猜这是因为与系统范围的应用程序实际处理来电时的振动冲突。 判断手机是否在来电时振动(使用AudioManager.shouldVibrate() ),并决定是否更改振动设置(使用AudioManager.setRingerMode()和AudioManager.setVibrateSetting() )。 如果我的应用程序更改了振动设置,则一旦手机返回CALL_STATE_IDLE状态,它们将被恢复。 然而,这种方法有时仍然不起作用,没有任何迹象。 我希望有人可以就这个问题提出一些建议。 欢迎对这两种方式或其他建议的评论。

SoundPool中的流量与AudioManager中的音量

我感到很困惑… SoundPool.play(int soundID, float leftVolume,float rightVolume ,int priority,int loop,float rate) 这里的体积是0.0到1.0 我见过的教程建议将流量计算为: AudioManager mgr = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE); int streamVolume = mgr.getStreamVolume(AudioManager.STREAM_MUSIC); streamVolume = streamVolume / AudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 1, 0, 1f); 这是有道理的。 我假设这个卷会覆盖用户在手机中设置的全局媒体音量,我可以通过改变soundPool中的流量来独立改变我的应用程序的音量。 但实际上它就像乘数一样 – 如果我在soundpool中设置0.5音量,实际音量将始终是全局音量的一半。 很容易重现: 将手机设置中的全局媒体音量设置为最大值 使用soundpool.play将活动中的音量设置为0.5 – 播放声音 将soundpool.play中的音量设置为1 – 播放声音,它会大两倍 有人可以解释为什么它会这样吗? 是传递给SoundPool.play方法的音量真的是全球音量的乘数吗?

什么是AudioFlinger,为什么TONE_PROP_ACK失败?

在我的应用程序中,我发出以下声明: toneGenerator.startTone(ToneGenerator.TONE_PROP_ACK, 600); 这对于运行Android 2.3.3的便宜的LG LS670非常有效,但在我拥有的所有其他手机上都没有声音,从Android 2.2.1到Android 2.3.4。 所以我知道操作系统版本在这里没有发挥作用(我还在文档中validation了它自API 1以来一直受支持)。 此外,Ringer音量和媒体音量都设置为最大值,toneGenerator初始化为: toneGenerator = new ToneGenerator(ToneGenerator.TONE_DTMF_1, 100); 我确认Settings.System.DTMF_TONE_WHEN_DIALING设置为1。 由于这种不一致的行为(跨越不同的手机)感到困惑,我在发生这种情况时检查了系统日志,并且我能够find的唯一可疑差异是听不到TONE_PROP_ACK的电话在他们的日志中有这一行: AudioFlinger setParameters(): io 25, keyvalue routing=0, tid 155, calling tid 121 AudioFlinger的目的是什么,以及它与静音TONE_PROP_ACK连接是TONE_PROP_ACK ? 知道如何修复我的代码,以便TONE_PROP_ACK始终发声,无论手机型号如何?

即使插入耳机,如何通过扬声器播放音频?

问题的标题可能会重复,但我的问题有时会出现问题并导致故障。 插入耳机时,我使用以下代码播放扬声器。 AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE); audioManager.setMode(AudioManager.STREAM_MUSIC); audioManager.setSpeakerphoneOn(true); if(! Globals.mediaPlayer.isPlaying()){ Globals.mediaPlayer.start(); } 上面的代码通过以下方式播放音频:1。很少次,它播放完美。 大多数时候,它在背景中播放循环声。 几次,它什么都不玩。 当插入耳机时,似乎系统声音播放没有错误。例如 – 设置铃声正确播放相应的铃声,没有任何故障。 请帮助我了解如何通过插入耳机的扬声器正确播放声音。

KeyEvent.ACTION_UP为ACTION_MEDIA_BUTTON触发了TWICE

我有这个ACTION_MEDIA_BUTTON的广播接收器,它实际上适用于Android 2.x和Android 4.1,但由于一些奇怪的原因,在Android 2.x(仅限)上 ,我得到每个甚至两次 (只需单击暂停按钮,当然): public class RemoteControlReceiver extends BroadcastReceiver { private static long prevEventTime = 0; @Override public void onReceive(Context ctx, Intent intent) { if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) { KeyEvent event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); long curEventTime = event.getEventTime(); if (event != null && (event.getAction() == KeyEvent.ACTION_UP) /*&& (curEventTime != prevEventTime)*/) { int keycode = event.getKeyCode(); switch […]