Android调节屏幕亮暗度和音量

来源:互联网 发布:macbook必备软件 编辑:程序博客网 时间:2024/06/06 10:35

一.背景

做视频用到了就记录下,从github(https://github.com/curtis2/SuperVideoPlayer 谢谢大笑)上扒了一个项目的手势调亮度和音量(但是有bug!!!就是调节音量感觉会突然消失),本文重点是如何调节音量


二.代码


package com.example.administrator.gesturetext;import android.content.Context;import android.media.AudioManager;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.view.Display;import android.view.GestureDetector;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.view.WindowManager;import android.widget.FrameLayout;import android.widget.ImageView;import android.widget.RelativeLayout;public class MainActivity extends AppCompatActivity {    private FrameLayout mVolumeBrightnessLayout;    private ImageView mOperationBg;    private ImageView mOperationPercent;    private GestureDetector mGestureDetector;    private AudioManager mAudioManager;    private int mMaxVolume;    private int mVolume = -1;    private float mBrightness = -1f;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        RelativeLayout rlContentContainer = (RelativeLayout) findViewById(R.id.rl_content_container);        mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);        mMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);        mVolumeBrightnessLayout = (FrameLayout) findViewById(R.id.operation_volume_brightness);        mOperationBg = (ImageView) findViewById(R.id.operation_bg);        mOperationPercent = (ImageView) findViewById(R.id.operation_percent);        mGestureDetector = new GestureDetector(MainActivity.this, new VolumeBrightnesGestureListener());        rlContentContainer.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View view, MotionEvent motionEvent) {                if (mGestureDetector.onTouchEvent(motionEvent)) {                    return true;                }                switch (motionEvent.getAction() & MotionEvent.ACTION_MASK) {                    case MotionEvent.ACTION_DOWN:                        break;                    case MotionEvent.ACTION_UP:                        endGesture();                        break;                }                return true;            }        });    }    private Handler mDismissHandler = new Handler() {        @Override        public void handleMessage(Message msg) {            if (msg.what == 0) {                mVolumeBrightnessLayout.setVisibility(View.GONE);            }        }    };    private void endGesture() {        mVolume = -1;        mBrightness = -1f;        // 隐藏        mDismissHandler.removeMessages(0);        mDismissHandler.sendEmptyMessageDelayed(0, 500);    }    private class VolumeBrightnesGestureListener extends GestureDetector.SimpleOnGestureListener {        @Override        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {            float mOldX = e1.getX(), mOldY = e1.getY();            int y = (int) e2.getRawY();            Display disp = getWindowManager().getDefaultDisplay();            int windowWidth = disp.getWidth();            int windowHeight = disp.getHeight();            //1440 2392            if (mOldX > windowWidth * 3.0 / 5) {                onVolumeSlide((mOldY - y) / windowHeight);                return true;            } else if (mOldX < windowWidth *2.0/ 5.0) {                onBrightnessSlide((mOldY - y) / windowHeight);                return true;            }            return false;        }    }    /**     * 声音高低     *     * @param percent     */    private void onVolumeSlide(float percent) {        if (mVolume == -1) {            mVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);            if (mVolume < 0)                mVolume = 0;            mOperationBg.setImageResource(R.drawable.video_volumn_bg);            mVolumeBrightnessLayout.setVisibility(View.VISIBLE);        }        int index = (int) (percent * mMaxVolume) + mVolume;        if (index > mMaxVolume)            index = mMaxVolume;        else if (index < 0)            index = 0;        mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, index, 0);        ViewGroup.LayoutParams lp = mOperationPercent.getLayoutParams();        lp.width = findViewById(R.id.operation_full).getLayoutParams().width * index / mMaxVolume;        mOperationPercent.setLayoutParams(lp);    }    /**     * 处理屏幕亮暗     *     * @param percent     */    private void onBrightnessSlide(float percent) {        if (mBrightness < 0) {            mBrightness = getWindow().getAttributes().screenBrightness;            if (mBrightness <= 0.00f)                mBrightness = 0.50f;            if (mBrightness < 0.01f)                mBrightness = 0.01f;            mOperationBg.setImageResource(R.drawable.video_brightness_bg);            mVolumeBrightnessLayout.setVisibility(View.VISIBLE);        }        WindowManager.LayoutParams lpa = getWindow().getAttributes();        lpa.screenBrightness = mBrightness + percent;        if (lpa.screenBrightness > 1.0f)            lpa.screenBrightness = 1.0f;        else if (lpa.screenBrightness < 0.01f)            lpa.screenBrightness = 0.01f;        getWindow().setAttributes(lpa);        ViewGroup.LayoutParams lp = mOperationPercent.getLayoutParams();        lp.width = (int) (findViewById(R.id.operation_full).getLayoutParams().width * lpa.screenBrightness);        mOperationPercent.setLayoutParams(lp);    }}



三.代码分析

(1)屏幕亮暗度

WindowManager.LayoutParams lpa = getWindow().getAttributes();lpa.screenBrightness = mBrightness + percent;if (lpa.screenBrightness > 1.0f)    lpa.screenBrightness = 1.0f;else if (lpa.screenBrightness < 0.01f)    lpa.screenBrightness = 0.01f;getWindow().setAttributes(lpa);
注意!!!:如果要跟系统同步  需要写WRITTING_SETTING权限,Android6.0及以上需要写个intent手动设置,在清单文件中写没用的(这个太傻比了,估计没人会要这么做)


(2)音量


我们这里只设置了媒体音乐

mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE)mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, index, 0);

音量分很多种

public static final int STREAM_ALARM = 4;public static final int STREAM_DTMF = 8;public static final int STREAM_MUSIC = 3;public static final int STREAM_NOTIFICATION = 5;public static final int STREAM_RING = 2;public static final int STREAM_SYSTEM = 1

可以看出有很多种,套路都是一样的


代码链接待添加


0 0
原创粉丝点击