Articles of android audiomanager

由于AudioManager,Android Context Memory Leak ListView

我有一个ListView ,我希望在活动结束时从内存中清除它。 但是,它似乎正在泄漏。 当我检查内存转储,并获取ListView的pathToGC ,我得到以下内容, Class Name | Shallow Heap | Retained Heap android.widget.ExpandableListView @ 0x4063e560 | 768 | 39,904 |- list, mList com.hitpost.TeamChooser @ 0x405f92e8 | 176 | 1,648 | ‘- mOuterContext android.app.ContextImpl @ 0x40657368 | 160 | 304 | ‘- mContext android.media.AudioManager @ 0x40662600 | 40 | 168 | ‘- this$0 android.media.AudioManager$1 @ […]

如何在Android L中以编程方式打开来电扬声器?

我想在Android 5.0中使用我的手机的应答电话的GUI(手机的GUI)来接听来电。 我find了一种方法,需要进行一项活动,用于发送一些动作来打开Phone的GUI。 我成功打开了来电的电话GUI。 问题是如何为Phone的GUI打开扬声器。 我尝试了代码,但它没有打开。 你能帮我解决Android L中的那个问题吗? audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); audioManager.setMode(AudioManager.MODE_IN_CALL); if (!audioManager.isSpeakerphoneOn()) audioManager.setSpeakerphoneOn(true); audioManager.setMode(AudioManager.MODE_NORMAL); 表现 此外,我们是否有更多的射击方式打开接听来电使用接听电话的意图。 我的方式很长,因为它使用了一个Activity。 这是我的全class代码 public class AcceptCallActivity extends Activity { private static final String MANUFACTURER_HTC = “HTC”; private KeyguardManager keyguardManager; private AudioManager audioManager; private CallStateReceiver callStateReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); audioManager […]

如何检测用户何时在Android设备上插入耳机? (与ACTION_AUDIO_BECOMING_NOISY相反)

我正在开发一个具有以下必要条件的应用程序:如果设备中插入了耳机并且用户将其删除,我需要将所有流静音。 为此,我需要收听AudioManager.ACTION_AUDIO_BECOMING_NOISY广播。 还行吧! 这里没问题。 但是当用户再次插入耳机时 ,我需要取消静音设备。 但是广播没有AudioManager.ACTION_AUDIO_BECOMING_NOISY 。 我不知道耳机何时再次插上。 一种解决方案是定期查看AudioManager.isWiredHeadsetOn()是否为true但这对我来说似乎不是一个好的解决方案。 有没有办法检测用户何时在设备上插入耳机? 编辑 :我尝试以这种方式使用Intent.ACTION_HEADSET_PLUG , 但它没有用 。 在manifest.xml中我放了: 这是我的MusicIntentReceiver.java的代码: public class MusicIntentReceiver extends BroadcastReceiver { public void onReceive(Context ctx, Intent intent) { AudioManager audioManager = (AudioManager)ctx.getSystemService(Context.AUDIO_SERVICE); if (intent.getAction().equals(Intent.ACTION_HEADSET_PLUG)) { Log.d(“Let’s turn the sound on!”); //other things to un-mute the streams } } } 尝试其他任何解决方案?

到目前为止,无法在Android上实现Gapless音频循环

我已经尝试了几乎所有的方法,但是我没能在循环单个音轨之间实现无间隙音频播放,持续时间为10-15秒。 我尝试过的步骤失败了: 使用setLooping(true)不同音频文件格式.mp3 .wav .ogg : MediaPlayer mp1 = MediaPlayer.create(MainActivity.this, R.raw.track1); mp1.setLooping(true); mp1.start(); 创建两个setOnCompletionListener播放器并使用setOnCompletionListener一个接一个地循环,但无法无间隙地循环。 使用setNextMediaPlayer(nextmp)一些如何工作,但只有两个循环是可能的。 在完成前两个循环后,我们必须准备并重新开始。 mp1.start(); mp1.setNextMediaPlayer(mp2); 更新: @Jeff Mixon的结果回答: Mediaplayer循环因Android错误而停止 。 Jeff Mixon工作正常,但之后只有10或20个循环,由于一些垃圾收集问题,Mediaplayers会立即停止离开日志,如下所示。 我真的有点困在这里2年了。 提前致谢。 E/MediaPlayer(24311): error (1, -38) E/MediaPlayer(23256): Error(1,-1007) E/MediaPlayer(23546): Error (1,-2147483648)

在Android 7(API级别24)中,我的应用程序不允许静音手机(将铃声模式设置为静音)

我有一个应用程序通过使用AudioManager将手机静音并使用此代码将铃声模式设置为静音: AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); try { audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT) } catch (Exception e) { e.printStackTrace(); } 这适用于Android 6,但现在使用Android 7,我收到以下错误: System.err: java.lang.SecurityException: Not allowed to change Do Not Disturb state System.err: at android.os.Parcel.readException(Parcel.java:1683) System.err: at android.os.Parcel.readException(Parcel.java:1636) System.err: at android.media.IAudioService$Stub$Proxy.setRingerModeExternal(IAudioService.java:962) System.err: at android.media.AudioManager.setRingerMode(AudioManager.java:1022) System.err: at controllers.SearchResultController.mutePhone(SearchResultController.java:185) 有什么新的权限我需要要求才能使这项工作? 我查看了Android权限列表,但找不到任何相似的内容。

增加录制Android AudioRecord的音量

我正在使用AudioRecord和跛脚logging麦克风input到一个MP3样品12秒。 audio是预期的录音机,但我意识到音量太低。 有没有办法增加录音的音量?

不断检查Android服务中的音量变化

我写了这段代码,显然是有缺陷的。 我如何去创build一个服务,将不断检查音量的变化? 关键听众不能在服务中使用,请不要使用音量键监听器发表答案。 我的代码是错误的,因为我给了while循环的虚拟条件。 什么是我的服务检查音量变化,而不是崩溃的条件? 它不能是isScreenOn()因为在听音乐和屏幕closures时音量可以改变。 码 AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE); int currentVolume = audio.getStreamVolume(AudioManager.STREAM_RING); int newVolume=0; while(1==1) { newVolume = audio.getStreamVolume(AudioManager.STREAM_RING); if(currentVolume!=newVolume) { Toast.makeText(this, "Volume change detected!", Toast.LENGTH_LONG).show(); } }

使用现有的MediaPlayer更改audio播放的数据源?

我试图使用相同的媒体播放器,但更改数据源。 这是我想要做的: private MediaPlayer mMediaPlayer; public void pickFile1() { initMediaPlayer("myfile1.mp3"); } public void pickFile2() { initMediaPlayer("myfile2.mp3"); } private void initMediaPlayer(String mediafile) { // Setup media player, but don't start until user clicks button! try { if (mMediaPlayer == null) { mMediaPlayer = new MediaPlayer(); } else { mMediaPlayer.reset(); // so can change data source etc. […]

如何获得Android的当前铃声?

我发现了很多例子如何得到默认的铃声。 类似的东西: Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE); Ringtone ringtone = RingtoneManager.getRingtone(getApplicationContext(), alert); ringtone.setStreamType(AudioManager.STREAM_RING); ringtone.play(); 但是我想获得用户设置的实际当前铃声。

使用AudioTrack与AudioManager setSpeakerphoneOn

我正在使用AudioTrack播放通过UDP套接字收到的声音。 我听到很多声音,所以我决定使用AudioManager。 但是,AudioManager改变了超出应用程序界限的声音路由。 以下是我正在使用的代码。 m_amAudioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); m_amAudioManager.setMode(AudioManager.MODE_IN_CALL); m_amAudioManager.setSpeakerphoneOn(false); 这个代码的问题是,当我closures应用程序并启动音乐播放器时,声音来自前置扬声器而不是后置扬声器,我无法改变它。 要解决此问题,我决定在closures我的应用程序时添加以下行。 m_amAudioManager.setSpeakerphoneOn(true); 但是,这条线的问题是,当我接到一个电话(普通电话),默认情况下扬声器打开。 我真的需要帮助。