我需要在触摸屏幕上滑动/移动时实现音量更改功能+屏幕亮度调整

时间:2019-06-27 09:12:38

标签: java android exoplayer

如何在应用中实现滑动/触摸音量和亮度调节功能。

我已在Touch Listener上设置了Playerview。 ExoPlayer在触摸列表器上设置。仅当继续滑动视图时,它才可以使用。我需要像任何Android Mobile的内置视频播放器应用程序上的MX Player中的Functionalit一样实现连续滑动。...

1 个答案:

答案 0 :(得分:1)

音量控制

向您的AndroidManifest.xml添加权限android.permission.MODIFY_AUDIO_SETTINGS

AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audio.adjustStreamVolume(
    AudioManager.STREAM_MUSIC,           // or STREAM_ACCESSIBILITY, STREAM_ALARM, STREAM DTMF, STREAM_NOTIFCATION, STREAM_RING, STREAM_SYSTEM, STREAM_VOICE_CALL
    AudioManager.ADJUST_LOWER,           // or ADJUST_RAISE, ADJUST_SAME
    0                                    // or FLAG_PLAY_SOUND, FLAG_REMOVE_SOUND_AND_VIBRATE, FLAG_SHOW_UI, FLAG_VIBRATE, FLAG_ALLOW_RINGER_MODES
    ) 
  

在一个方向上一步调整特定流的音量。

     

此方法仅应由替换音频范围的平台范围管理的应用程序或主电话应用程序使用。

     

如果设备实施isVolumeFixed()指示的固定音量策略,则此方法无效。

     

从N开始,不允许振铃器模式调整以切换“请勿打扰”,除非已授予该应用“请勿打扰”访问权限。请参阅NotificationManager#isNotificationPolicyAccessGranted()。

https://developer.android.com/reference/android/media/AudioManager

亮度控制

向您的AndroidManifest.xml添加权限Manifest.permission.WRITE_SETTINGS

if (Settings.System.canWrite(getContext())) {
    // values between 0-255
    Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 255); // full brightness
}

https://developer.android.com/reference/android/provider/Settings.System

滑动:

归功于Mirek Rusin Android: How to handle right to left swipe gestures

OnSwipeTouchListener.java:

import android.content.Context;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;

public class OnSwipeTouchListener implements OnTouchListener {

    private final GestureDetector gestureDetector;

    public OnSwipeTouchListener (Context ctx){
        gestureDetector = new GestureDetector(ctx, new GestureListener());
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        return gestureDetector.onTouchEvent(event);
    }

    private final class GestureListener extends SimpleOnGestureListener {

        private static final int SWIPE_THRESHOLD = 100;
        private static final int SWIPE_VELOCITY_THRESHOLD = 100;

        @Override
        public boolean onDown(MotionEvent e) {
            return true;
        }

        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            boolean result = false;
            try {
                float diffY = e2.getY() - e1.getY();
                float diffX = e2.getX() - e1.getX();
                if (Math.abs(diffX) > Math.abs(diffY)) {
                    if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
                        if (diffX > 0) {
                            onSwipeRight();
                        } else {
                            onSwipeLeft();
                        }
                        result = true;
                    }
                }
                else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
                    if (diffY > 0) {
                        onSwipeBottom();
                    } else {
                        onSwipeTop();
                    }
                    result = true;
                }
            } catch (Exception exception) {
                exception.printStackTrace();
            }
            return result;
        }
    }

    public void onSwipeRight() {
    }

    public void onSwipeLeft() {
    }

    public void onSwipeTop() {
    }

    public void onSwipeBottom() {
    }
}

用法:

imageView.setOnTouchListener(new OnSwipeTouchListener(MyActivity.this) {
    public void onSwipeTop() {
        Toast.makeText(MyActivity.this, "top", Toast.LENGTH_SHORT).show();
    }
    public void onSwipeRight() {
        Toast.makeText(MyActivity.this, "right", Toast.LENGTH_SHORT).show();
    }
    public void onSwipeLeft() {
        Toast.makeText(MyActivity.this, "left", Toast.LENGTH_SHORT).show();
    }
    public void onSwipeBottom() {
        Toast.makeText(MyActivity.this, "bottom", Toast.LENGTH_SHORT).show();
    }

});