我可以更改媒体音量吗?如何?到目前为止我用过这个:
setVolumeControlStream(AudioManager.STREAM_MUSIC);
Run Code Online (Sandbox Code Playgroud)
但是有一个搜索栏并希望改变媒体音量,而不是铃声音量.
那么有人可以告诉我如何只更改媒体音量,onCreate()然后我会修复搜索栏.
有没有办法获取/设置媒体量?我尝试过以下方法:
AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
int currentVolume = audio.getStreamVolume(AudioManager.STREAM_RING);
Run Code Online (Sandbox Code Playgroud)
但它返回铃声音量.
我正在研究通过公对公音频插孔电缆传输文本数据.
我正在HTC one V和PC上进行测试,它支持用于数据传输的公对公音频插孔,如本维基百科文章所述.它说:
第一个将返回信号放在第二个环上,麦克风放在套管上,用于Apple的iPhone系列,HTC设备,最新的三星,诺基亚和索尼手机等.
你可以在这里看到我的代码.
转移过程中遇到的问题:如果我通过输入发送方0-31之间的任何值生成音调,由于错误的FSK调制/解调类型,接收器将在2-3次尝试中获得实际值.你会建议最好的纠错码,它可以帮助我纠正从另一个Android设备收到的输入吗?
如果有人之前已经完成过这种类型的数据传输,请提供代码参考或有关技术方面的一些基本指导,因此我可以完成此操作并使其成为每个人的开源.
android android-mediarecorder android-audiomanager android-audiorecord
我有一个应用程序,通过使用AudioManager将手机静音,并使用此代码将铃声模式设置为静音:
AudioManager audioManager =
(AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
try {
audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT)
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
这适用于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)
Run Code Online (Sandbox Code Playgroud)
有什么新的权限我需要要求才能使这项工作?
我查看了Android权限列表,但找不到任何相似的内容.
如何在不使用Android设备上的音量按钮控制音量的情况下使用搜索栏准确更改应用程序的音量?我在我的android上的音量键上有单独的功能,这就是为什么我想使用搜索栏来控制音量.谁能帮帮我吗?
我已经尝试了几乎所有方法,但是我无法在循环单个轨道之间实现无间隙音频播放,持续时间为10-15秒.
我尝试过的步骤失败了:
不同的音频文件格式.mp3 .wav .ogg使用
setLooping(true):
MediaPlayer mp1 = MediaPlayer.create(MainActivity.this, R.raw.track1);
mp1.setLooping(true);
mp1.start();
Run Code Online (Sandbox Code Playgroud)创建两个媒体播放器并使用setOnCompletionListener相同的循环逐个循环
无法循环无间隙.
使用setNextMediaPlayer(nextmp)它的工作方式,但只有两个循环是可能的.在完成前两个循环后,我们必须准备并重新开始.
mp1.start();
mp1.setNextMediaPlayer(mp2);
Run Code Online (Sandbox Code Playgroud)更新: @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)
Run Code Online (Sandbox Code Playgroud)我一直试图使用Android AudioManager.setMicrophoneMute()而没有太大的成功.也就是说,无论我做什么,它都会拒绝将麦克风静音.
我在网上搜索了一些线索,我发现有几个参考报告了类似的经历:
这引出了一个问题:是否AudioManager.setMicrophoneMute()有效?它只是一个存根方法,等待在未来的Android版本中实现吗?如果没有,它是如何工作的?我需要做些什么才能让它发挥作用?有什么条件让它的名字意味着它起作用?
编辑:我注意到这个方法的文档说:
此方法仅应由替换平台范围的音频设置管理或主要电话应用程序的应用程序使用.
这是什么意思?为什么我要替换平台范围的管理?我真的需要这样做吗?如果是这样,我该怎么做?
编辑:下面的答案是伟大的,但我仍然不明白:
请解释.谢谢.
我正在开发一个具有以下必要条件的应用程序:如果设备中插入了耳机并且用户将其删除,我需要将所有流静音.要做到这一点,我需要听广播AudioManager.ACTION_AUDIO_BECOMING_NOISY.还行吧!这里没问题.
但是当用户再次插入耳机时,我需要取消静音设备.但是没有AudioManager.ACTION_AUDIO_BECOMING_NOISY相反的广播.我不知道耳机何时再次插上.
一个解决办法是定期检查是否AudioManager.isWiredHeadsetOn()是true但这似乎并没有得到很好的解决了我.
有没有办法检测用户何时在设备上插入耳机?
编辑:我试图用Intent.ACTION_HEADSET_PLUG这种方式,但它没有用.
在manifest.xml中我放了:
<receiver android:name=".MusicIntentReceiver" >
<intent-filter>
<action android:name="android.intent.action.HEADSET_PLUG" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
以下是我的代码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
}
}
}
Run Code Online (Sandbox Code Playgroud)
尝试其他任何解决方案?
该程序的功能如下:用户有一个电话号码列表,只有当没有其他系统范围的应用程序提供振动时(例如静音模式),手机才能在来电时振动.我知道这是违反规则的,因为应用程序应该尊重用户的设置,但应用程序仅限于某些具有此需求的用户.我尝试了两种方法,但它们都不令人满意:
收听电话状态并使用我自己的模式直接触发振动服务(带Vibrator.vibrate()).当手机处于CALL_STATE_RINGING状态时,此方法有效,没有来电但随机有效,我猜这是因为与系统范围的应用程序冲突,实际上处理来电时的振动.
判断手机是否在来电时振动AudioManager.shouldVibrate(),并决定是否更改振动设置(使用AudioManager.setRingerMode()和AudioManager.setVibrateSetting()).如果我的应用程序更改了振动设置,则一旦手机恢复CALL_STATE_IDLE状态,它们将被恢复.然而,这种方法有时仍然无法正常工作,没有任何原因.
我希望有人可以就这个问题提出一些建议.欢迎对这两种方式或其他建议的评论.
我有一个ListView,我希望在活动结束时从内存中清除它.但是,它似乎正在泄漏.当我检查了内存转储,并得到pathToGC了ListView我得到以下,
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 @ 0x406626b0 Unknown| 24 | 24
Run Code Online (Sandbox Code Playgroud)
我看到同样的情况泄漏了很多我的ListView's.诀窍是,我根本没有AudioManager在我的应用程序中使用任何地方,根本没有来自应用程序的声音.请帮忙,这让我发疯了.显然是想弄清楚为什么会发生这种情况以及可能是根本问题?
android ×10
volume ×2
audio ×1
get ×1
listview ×1
media ×1
memory-leaks ×1
microphone ×1
seekbar ×1
vibration ×1