问题标签 [android-audiomanager]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
783 浏览

java - AudioManager 的 Android SeekBar 偏好?

如何seekbar preference在Android中更改媒体音量?

我已经尝试过RoboBunnies 示例mike114 的代码项目,但没有一个对我有用。我希望它看起来是标题和摘要,然后在媒体音量大小的百分比seekbar右侧。seekbar

0 投票
2 回答
1540 浏览

android - Android 应用中的音频控制

我正在使用一个 android 应用程序,我需要optionMenu使用一个选项来禁用/启用应用程序中的声音。

在android中是否可以完全控制应用程序的音量?有没有什么方法可以做到这一点?我必须用代码做到这一点吗?

谢谢

0 投票
1 回答
2176 浏览

android - 如何为特定来电提供自定义振动

该程序的功能是这样的:用户有一个电话号码列表,只有当没有其他系统范围的应用程序提供振动(例如在静音模式下)时,手机才能在来电时振动。我知道这在某种程度上违反了规则,因为应用程序应该尊重用户的设置,但应用程序仅限于某些有此需求的用户。我尝试了两种方法,但都不满意:

  1. 监听电话状态,直接用我自己的模式(带Vibrator.vibrate())触发振动服务。这种方法在没有来电的情况下有效,但在手机处于CALL_STATE_RINGING状态时随机有效,我猜这是因为与实际处理来电时振动的系统范围的应用程序冲突。

  2. 判断手机是否有来电振动(用AudioManager.shouldVibrate()),决定是否改变振动设置(用AudioManager.setRingerMode()AudioManager.setVibrateSetting())。如果我的应用程序更改了振动设置,一旦手机恢复状态,它们将被恢复CALL_STATE_IDLE。然而,这种方法有时仍然不起作用,没有任何原因的迹象。

我希望有人可以就这个问题提供一些建议。欢迎对这两种方式或其他建议发表评论。

0 投票
2 回答
603 浏览

java - 由于 logging / gc / audioManager 导致 Android 代码滞后

为简单起见:我正在开发一个小应用程序,我们希望在其中单击多个对象。单击对象时,它应该播放声音。

这很好用,除了不时,整个应用程序(包括 LogCat 的日志记录)只是冻结大约 5 秒,之后它似乎赶上了。(所有线程冻结)我的意思是追赶;如果在冻结过程中继续点击,解冻后它仍然知道该怎么做。

日志很简单:

01-17 14:52:08.292: D/AudioManager(17963): setStreamVolume(streamType:3, index:11, flags:0) 01-17 14:52:08.473: D/dalvikvm(17963): GC_CONCURRENT 释放 417K, 48%免费3113K/5895K,外接140K/647K,暂停2ms+4ms

01-17 14:52:09.033: D/AudioManager(17963): setStreamVolume(streamType:3, index:11, flags:0) 01-17 14:52:09.484: D/AudioManager(17963): setStreamVolume(streamType: 3,索引:11,标志:0)01-17 14:52:10.174:D / AudioManager(17963):setStreamVolume(streamType:3,索引:11,标志:0)01-17 14:52:10.785:D /AudioManager(17963): setStreamVolume(streamType:3, index:11, flags:0) 01-17 14:52:15.169: D/dalvikvm(17963): GC_EXPLICIT freed 338K, 49% free 3061K/5895K, external 140K/ 647K,暂停 43ms

注意最后两个日志之间的 5 秒延迟。

我尝试删除所有音频,但这并不能解决任何问题。
正在记录的文本文件显然也不会影响任何事情。

有没有人知道如何解决这个烦人的问题?
提前致谢。


编辑:
在冻结期间暂停程序时,它指向某个方法。什么可能导致这种冻结:

0 投票
2 回答
6433 浏览

android - Android:如何检查手机音频输出?

我想知道是否有办法检查音频在哪里播放(内置扬声器、耳机插孔、单声道、立体声等)和 Android 设备?

谢谢。

0 投票
1 回答
597 浏览

java - Android 应用程序返回 NULL

在开始之前让我说我过去两天一直在寻找解决错误,确实找到了一些对我不起作用的可用解决方案。所以最后我在这里发布我的代码:

关于代码:

我想编写一个 Java 应用程序来检查将音频管理器设置为 MODE_IN_CALL 的场景。

代码:

和xml

错误:01-31 14:36:53.424:E/AndroidRuntime(1309):java.lang.RuntimeException:无法启动活动 ComponentInfo{com.AudioBT/com.AudioBT.AudioBTActivity}:java.lang.NullPointerException

到目前为止,我无法找到崩溃的原因。一个类似的线程在这里但是我无法在我的情况下捕获异常 findViewById() 为布局 XML 中的自定义组件返回 null,而不是其他组件

我一直在使用最新版本的 Android SDK 4.0.3 和 Esclipse IDE for Java

任何帮助,将不胜感激 ,

谢谢你

0 投票
1 回答
1678 浏览

android - Android 音频模式更改通知

我想知道音频模式(由AudioManager.getMode()返回)何时改变。这样我就可以在模式不是 MODE_NORMAL 时禁用我的应用程序中的功能。显然我可以进行投票,但这对电池不友好并且浪费 CPU。

有来电时有广播意图,但这不可用,因为它还会告诉您传入的电话号码,我不希望我的应用程序获得这些权限。用户切换到不同的应用程序时可能会发生模式更改,在这种情况下我的 Activity 会知道,但是在许多其他情况下音频模式可能会更改,而我只是不知道。

我不能使用 2.2 的 AudioFocus 东西,因为我需要支持 1.6 以后的版本。

编辑:我想停止的功能包括抖动检测和各种计时器。我想在音频模式非正常时进入休眠模式,并在 MODE_NORMAL 上再次激活。

0 投票
1 回答
10861 浏览

android - Android:如何生成频率?

Android中是否有一种很好的方法来生成然后播放频率(例如1000hz,245hz)?

0 投票
1 回答
1250 浏览

android - Android API level 7 中是否有任何等效的 requestAudioFocus 功能?

我的 Android 应用程序需要支持 Android 平台 2.1.x(即 Android API 级别 7)。我需要使用requestAudioFocus()abandonAudioFocus()方法在我的应用程序开始播放媒体时暂停其他应用程序(例如音乐)播放,并在我的应用程序停止后恢复它们。

但是,这两个函数仅在 API 级别 8 及以上可用。API 级别 7 的等效函数是什么?或者在 API 级别 8 之前如何做到这一点?

0 投票
0 回答
1278 浏览

android - Android 的 AudioManager.getMode() 似乎不可靠。同样的情况产生不同的结果

我目前正在开发一个音频播放器,它应该在失去音频焦点时暂停/停止,例如来电时。

虽然我通过使用 OnAudioFocusChangeListener 可以正常工作,但我想增强此功能以在不同情况下表现不同。

由于应用程序实现了超时功能,以防用户在收听时睡着了,我只想在我可以肯定用户仍然醒着时恢复播放。

我想我几乎可以忽略收到电子邮件的通知声音,因为这些通常只是短片,我的音频继续播放不会像在电话中那样对用户造成滋扰。因此,我想将暂停/停止限制为有来电或用户拨打电话的情况。

我已经看到 AudioManager 有一些方便的状态来发出信号,但是在我的 OnAudioFocusChangeListener 中调用 AudioManager.getMode() 时,我没有得到一致的输出。有时来电确实会生成 MODE_RINGTONE,但通常足以使功能不可靠,我得到 MODE_NORMAL。

只要我在重新获得焦点时获得正确的模式,我实际上可以忍受失去焦点时不知道模式的情况,但这似乎也不能可靠地工作。

我可以测试此行为的唯一实际设备是运行 Android 2.3.6 的 Galaxy S2(由于我使用 MediaMetadataRetriever,该应用程序是 API 级别 10,因此至少需要 2.3.3)。我已经在各种模拟系统中测试了音频焦点的丢失和重新获得,总体而言它似乎在那里工作得更好,但我每次也没有真正得到相同的结果。

也许问题是我误解了 AudioManager.getMode() 应该返回什么,也许有人可以为我澄清一下:

  1. 电话响铃-> AudioManager.getMode() 应该在焦点丢失时返回 MODE_RINGTONE
  2. 用户拨打或接听电话 -> AudioManager.getMode() 应在焦点丢失时返回 MODE_IN_CALL
  3. 不接听电话 -> AudioManager.getMode() 应该在焦点增益时返回 MODE_RINGTONE
  4. 用户挂断 -> AudioManager.getMode() 应该在焦点增益时返回 MODE_IN_CALL

这是它应该工作的方式吗?至少我的测试表明这是它应该的方式,但由于某种原因并非一直如此。

我尝试解决此问题的另一种方法是使用 PhoneStateListener,但我遇到的问题是这需要我的应用程序请求读取电话状态的权限。由于我正在共享我的应用程序,目前通过 SourceForge,稍后可能通过 Android Market,我想避免使用这种权限。

所以,最后我想问一下我理解 AudioManager.getMode() 的方式是否正确,是否有任何关于其可靠性的信息,至于我从中得到的结果有点没用。