如何使用搜索栏准确更改我的应用的音量,而不通过我的android设备上的音量按钮控制音量?我在Android上的音量键上有单独的功能,这就是为什么我想用一个搜索栏来控制音量的原因。谁能帮帮我吗?在Android中使用SeekBar控制音量?
回答
请看下面的代码。它解决了你的问题。
import android.app.Activity;
import android.content.Context;
import android.media.AudioManager;
import android.os.Bundle;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
public class TestExample extends Activity
{
/** Called when the activity is first created. */
private SeekBar volumeSeekbar = null;
private AudioManager audioManager = null;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setVolumeControlStream(AudioManager.STREAM_MUSIC);
setContentView(R.layout.main);
initControls();
}
private void initControls()
{
try
{
volumeSeekbar = (SeekBar)findViewById(R.id.seekBar1);
audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
volumeSeekbar.setMax(audioManager
.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
volumeSeekbar.setProgress(audioManager
.getStreamVolume(AudioManager.STREAM_MUSIC));
volumeSeekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
{
@Override
public void onStopTrackingTouch(SeekBar arg0)
{
}
@Override
public void onStartTrackingTouch(SeekBar arg0)
{
}
@Override
public void onProgressChanged(SeekBar arg0, int progress, boolean arg2)
{
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
progress, 0);
}
});
}
catch (Exception e)
{
e.printStackTrace();
}
}
谢谢,它完美奇拉格拉瓦尔! – 2012-04-13 03:21:03
@NielPrince,您随时欢迎。 – 2012-04-13 03:23:41
Eclipse告诉我删除@Override注释..并且在我这样做后它不起作用。请帮忙 – Droidman 2012-12-03 11:46:27
这是一个自定义View
我用来调节音量。它通过滑动手指起作用,但您可以轻松改变它。
SliderView
public class SliderView extends View implements OnGestureListener, OnTouchListener {
private int mHeight = 0;
private int mMaxValue = 16;
private float mDelta = 0;
private int mColor = Color.WHITE;
private GestureDetector mGestureDetector;
private OnValueChangeListener mListener;
public SliderView(Context context) {
super(context);
init(context);
}
public SliderView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public SliderView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}
@Override
public boolean onDown(MotionEvent e) {
mDelta = 0;
return false;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
return false;
}
@Override
public void onLongPress(MotionEvent e) {
mDelta = 0;
}
@Override
public boolean onScroll(MotionEvent event1, MotionEvent event2, float distanceX, float distanceY) {
if (mDelta >= 1 || mDelta <= -1) {
if (mListener != null) {
mListener.onValueChanged((int) mDelta);
}
mDelta = 0;
} else {
mDelta += mMaxValue * distanceY/mHeight * 2;
}
return false;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
@Override
public void onSizeChanged(int w, int h, int oldw, int oldh) {
mHeight = getHeight();
}
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) {
v.setBackgroundColor(Color.argb(0x33, Color.red(mColor), Color.green(mColor),
Color.blue(mColor)));
} else if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
v.setBackgroundColor(Color.TRANSPARENT);
}
mGestureDetector.onTouchEvent(event);
return true;
}
public void setColor(int color) {
mColor = color;
}
public void setMax(int max) {
mMaxValue = max;
}
public void setOnValueChangeListener(OnValueChangeListener listener) {
mListener = listener;
}
private void init(Context context) {
setOnTouchListener(this);
mGestureDetector = new GestureDetector(context, this);
mHeight = getHeight();
}
public interface OnValueChangeListener {
void onValueChanged(int value);
}
}
使用它 - 确保你实现OnValueChangeListener
。
SliderView mSlider;
mSlider= (SliderView) findViewById(id);
mSlider.setOnValueChangeListener(this);
mSlider.setMax(mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
这不完全是你要求的,但它肯定会帮助你,我想。
@CommonsWare做这样的https://github.com/commonsguy/cw-omnibus/tree/master/SystemServices/Volume,还可以设置使用搜索栏
处理五种不同类型的卷
/***
Copyright (c) 2008-2012 CommonsWare, LLC
Licensed under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance with the License. You may obtain a copy
of the License at http://www.apache.org/licenses/LICENSE-2.0. Unless required
by applicable law or agreed to in writing, software distributed under the
License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
OF ANY KIND, either express or implied. See the License for the specific
language governing permissions and limitations under the License.
From _The Busy Coder's Guide to Android Development_
http://commonsware.com/Android
*/
package com.commonsware.android.syssvc.volume;
import android.app.Activity;
import android.content.Context;
import android.media.AudioManager;
import android.os.Bundle;
import android.widget.SeekBar;
public class Volumizer extends Activity {
SeekBar alarm=null;
SeekBar music=null;
SeekBar ring=null;
SeekBar system=null;
SeekBar voice=null;
AudioManager mgr=null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mgr=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
alarm=(SeekBar)findViewById(R.id.alarm);
music=(SeekBar)findViewById(R.id.music);
ring=(SeekBar)findViewById(R.id.ring);
system=(SeekBar)findViewById(R.id.system);
voice=(SeekBar)findViewById(R.id.voice);
initBar(alarm, AudioManager.STREAM_ALARM);
initBar(music, AudioManager.STREAM_MUSIC);//for Volume this is neccessary
initBar(ring, AudioManager.STREAM_RING);
initBar(system, AudioManager.STREAM_SYSTEM);
initBar(voice, AudioManager.STREAM_VOICE_CALL);
}
private void initBar(SeekBar bar, final int stream) {
bar.setMax(mgr.getStreamMaxVolume(stream));
bar.setProgress(mgr.getStreamVolume(stream));
bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
public void onProgressChanged(SeekBar bar, int progress,
boolean fromUser) {
mgr.setStreamVolume(stream, progress,
AudioManager.FLAG_PLAY_SOUND);
}
public void onStartTrackingTouch(SeekBar bar) {
// no-op
}
public void onStopTrackingTouch(SeekBar bar) {
// no-op
}
});
}
}
并为五类卷仅控制音量只使用
music=(SeekBar)findViewById(R.id.music);
和initBar(music, AudioManager.STREAM_MUSIC);
- 1. 使用seekbar的半圆形音量控制器
- 2. Android音频SeekBar
- 3. 在Windows中使用WMPLib控制音量
- 4. 在Android游戏中按音量控制
- 5. Android - 使用硬件音量按钮控制SoundPool的音量?
- 6. Android SeekBar控制MediaPlayer进度
- 7. Android独立音量控制
- 8. Android音乐Seekbar match_parent
- 9. Android,控制背景音的音量
- 10. 风格AlertDialog与SeekBar模仿原生音量控制
- 11. 将VideoView + SeekBar的视频的音量设置为控制条
- 12. 在android中使用seekbar
- 13. 如何使用android seekbar更改Chrome Cast设备音量
- 14. 通用音量控制 - 音量和BackgroundAudioPlayer.Instance.Volume
- 15. 音量控制
- 16. Android SeekBar定制
- 17. 控制音量调音台
- 18. Android SeekBar具有非常好的控制
- 19. 控制MediaPlayer中的音量
- 20. UIImagePickerController中的音量控制
- 21. Web Audio API使用音量控制
- 22. 使用滑块控制主音量? - Xcode
- 23. 使用ALSA的音量控制NVidia
- 24. 使用UIslider Iphone进行音量控制?
- 25. 如何使音量控制在MPMoviePlayerController
- 26. Android音量控制如何工作?
- 27. 音量控制iOS
- 28. 控制音量键
- 29. AudioServicesPlaySystemSound音量控制
- 30. Android音频控制
http://stackoverflow.com/questions/11095576/change-media-player-volume-on-seekbar/22039786#22039786 – 2014-02-26 11:26:46