使用搜索栏以控制在android系统音量?使用搜索栏以控制在android系统音量?(Using S

2019-05-13 12:49发布

我怎样才能准确地改变我的应用程序使用搜索条没有控制我的Android设备上的音量由音量按钮音量? 我对我的Android,这就是为什么我要使用搜索条来控制音量的音量键单独的功能。 谁能帮帮我吗?

Answer 1:

请看下面的代码。 它解决了你的问题。

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


Answer 2:

这是一个自定义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));

这不正是你问什么,但它一定要帮助你,我想。



Answer 3:

@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);



文章来源: Using SeekBar to Control Volume in android?