2012-04-13 48 views
31

मैं अपने एंड्रॉइड डिवाइस पर वॉल्यूम बटन द्वारा वॉल्यूम को नियंत्रित किए बिना एक खोजबार का उपयोग करके अपने ऐप की मात्रा को सटीक रूप से कैसे बदल सकता हूं? मेरे एंड्रॉइड पर वॉल्यूम कुंजियों पर मेरे पास अलग-अलग फ़ंक्शन है इसलिए मैं वॉल्यूम को नियंत्रित करने के लिए एक खोजबार का उपयोग करना चाहता हूं। क्या कोई मेरी मदद कर सकता हैं?एंड्रॉइड में वॉल्यूम को नियंत्रित करने के लिए सेकरबार का उपयोग करना?

+0

http://stackoverflow.com/questions/11095576/change-media-player-volume-on-seekbar/22039786#22039786 –

उत्तर

81

कृपया नीचे दिए गए कोड को देखें। यह आपकी समस्या हल करता है।

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(); 
     } 
    } 
+0

धन्यवाद, यह पूरी तरह से चिराग रावल का काम करता है !! –

+0

@NielPrince, आप हमेशा स्वागत करते हैं। –

+0

ग्रहण मुझे @ ओवरराइड एनोटेशन को हटाने के लिए कह रहा है .. और ऐसा करने के बाद यह काम नहीं करता है। कृपया – Droidman

3

यह एक कस्टम 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)); 

यह बिल्कुल ठीक नहीं है कि आप क्या पूछ रहे हैं, लेकिन मुझे लगता है कि यह निश्चित रूप से आपकी मदद करनी चाहिए।

2

@CommonsWarehttps://github.com/commonsguy/cw-omnibus/tree/master/SystemServices/Volume में इस तरह यह करना है और यह भी केवल मात्रा को नियंत्रित करने seekbar

वॉल्यूम पांच विभिन्न प्रकार के

/*** 
    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);

का उपयोग करें