如何使用搜索欄準確更改我的應用的音量,而不通過我的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. Android音頻SeekBar
- 2. 在Android遊戲中按音量控制
- 3. 在Windows中使用WMPLib控制音量
- 4. Android SeekBar控制MediaPlayer進度
- 5. Android音樂Seekbar match_parent
- 6. 在android中使用seekbar
- 7. 風格AlertDialog與SeekBar模仿原生音量控制
- 8. 將VideoView + SeekBar的視頻的音量設置爲控制條
- 9. 如何使用android seekbar更改Chrome Cast設備音量
- 10. 音量控制
- 11. Web Audio API使用音量控制
- 12. 使用UIslider Iphone進行音量控制?
- 13. 音量控制iOS
- 14. 控制音量鍵
- 15. AudioServicesPlaySystemSound音量控制
- 16. 如何在.NET 3.5中控制音量?
- 17. 如何在android中控制聲音?
- 18. 在片段中使用seekbar android
- 19. Android SeekBar在ListView中使用標籤
- 20. 在android中定製設計SeekBar
- 21. 使用android測量音量
- 22. 如何在iphone中使用uislider設置音量控制?
- 23. 如何在cocos2dx中使用音量增大和減小控制
- 24. 如何使用多個SeekBars(Android)一次控制多個聲音的音量?
- 25. 在Android中錄製高音量
- 26. 使用mergExt mergAV外部音頻音量控制mergAV external
- 27. 使用Java聲音時控制剪輯的音量(javax,sound.sampled)
- 28. 如何使用音量滑塊控制音軌?
- 29. 媒體音量控制
- 30. Jquery滑塊控制音量
http://stackoverflow.com/questions/11095576/change-media-player-volume-on-seekbar/22039786#22039786 – 2014-02-26 11:26:46