How to change screen contrast of any android device? - android

How can I change the contrast of screen in android through programming in android. I searched so many blog, it was not mentioned any where. Is it possible to control the contrast if possible please provide me the sample code.
Thanks in advance

see this link may be help to you....
Also see code
Settings.System.putInt(this.getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS, 20);
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness =0.2f;// 100 / 100.0f;
getWindow().setAttributes(lp);
startActivity(new Intent(this,RefreshScreen.class));

public class MainActivity extends AppCompatActivity {
boolean isFrontOn;
ImageButton btnFront;
SeekBar brightnessBar;
float brightness;
ContentResolver cResolver;
RelativeLayout overlayLayout;
String permissions[] = {"android.permission.WRITE_SETTING"};
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnFront = (ImageButton) findViewById(R.id.btnFront);
brightnessBar = (SeekBar) findViewById(R.id.brightnessBar);
cResolver = getContentResolver();
brightnessBar.setMax(255);
brightnessBar.setKeyProgressIncrement(1);
btnFront.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
if (!isFrontOn)
turnFrontOn();
else
turnFrontOff();
}
});
try {
brightness = Settings.System.getInt(cResolver, Settings.System.SCREEN_BRIGHTNESS);
} catch (Settings.SettingNotFoundException e) {
e.printStackTrace();
}
int screenBrightness = (int) brightness;
brightnessBar.setProgress(screenBrightness);
brightnessBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
int progressVal = 0;
#Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (progress <= 20)
progressVal = 20;
else
progressVal = progress;
}
#Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
#Override
public void onStopTrackingTouch(SeekBar seekBar) {
if (Build.VERSION.SDK_INT < 23 || checkSelfPermission(permissions[0]) != PackageManager.PERMISSION_DENIED)
Settings.System.putInt(cResolver, Settings.System.SCREEN_BRIGHTNESS, progressVal);
else requestPermissions(permissions, 0);
}
});
}
#Override
public void onRequestPermissionsResult(int requestCode, #NonNull String[] permissions, #NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if ( checkSelfPermission(permissions[0]) == PackageManager.PERMISSION_GRANTED) {
//ToDo your code here after checking permission
/*
i.e) Settings.System.putInt(cResolver, Settings.System.SCREEN_BRIGHTNESS, progressVal);
*/
}
}
}
try this in your code if your device API is greater than 22

Related

Update seekBar progress on UI

I am working at a flashlight app with stroboscope , at this moment the app is working, the flash is working with a button, and the frequency of the strobe is being incresed with the help of a seekbar.
The problem is that if the flash is on and i drag to the right on the seekbar to start and increse feqency of the strobe effect, but if I turn off the flash and drag on the seekbar at a certain point greaten than 0 and turn on the flash the strobe effect it works, but still when is on it will just not update and increase the freqency, and i have to turn off and onn again flashlight to change the freqency or to stop the strobe effect (of course when the flash is off move the seekBar).
Can you help me and make me understand why it does not update with the flash on, plesase! I would be grateful !
Thanks!
Here is the code :
SeekBar
SeekBar sbar = (SeekBar) findViewById(R.id.seekBar2);
sbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
#Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
freq = progress;
}
public void onStartTrackingTouch(SeekBar seekBar) {
}
#Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
StroboRunner
private class StroboRunner implements Runnable{
int freq;
boolean stopRunning = false;
volatile int delay = 100;
volatile int delayoff = 200;
#Override
public void run() {
Camera.Parameters paramsOn = camera.getParameters();
Camera.Parameters paramsOff = parameter;
paramsOn.setFlashMode(Parameters.FLASH_MODE_TORCH);
paramsOff.setFlashMode(Parameters.FLASH_MODE_OFF);
try{
while(!stopRunning) {
MainActivity.this.camera.setParameters(paramsOn);
MainActivity.this.camera.startPreview();
Thread.sleep(delay - freq);
// We make the thread sleeping
MainActivity.this.camera.setParameters(paramsOff);
MainActivity.this.camera.startPreview();
Thread.sleep(delayoff-freq);
}
} catch (Exception e){
}
}
}
Also for on and off of the flashlight I am using
private boolean turnOnOff(boolean on) {
if (on) {
if (freq != 0) {
SunetON();
isFlashLightOn = true;
sr = new StroboRunner();
sr.freq = freq;
t = new Thread(sr);
t.start();
return on;
}
else
parameter.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
SunetON();
}
if (!on) {
if (t != null) {
SunetOff();
sr.stopRunning = true;
isFlashLightOff = true;
t = null;
return on;
}
else
parameter.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
SunetOff();
}
camera.setParameters(parameter);
camera.startPreview();
return on;
}
the onClickListener
flashLight.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
isChecked = !isChecked;
if (isChecked)
flashLight.setImageResource(R.drawable.on);
else
flashLight.setImageResource(R.drawable.off);
turnOnOff(isChecked);
}
});
EDIT: Nevermind, bad if/else formatting -- turnOnOff was already outside
A good place to start is to move turnOnOff(isChecked) outside of your else statement.
flashLight.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
isChecked = !isChecked;
if (isChecked)
flashLight.setImageResource(R.drawable.on);
else
flashLight.setImageResource(R.drawable.off);
}
turnOnOff(isChecked);
});

Set volume of a video of a VideoView + SeekBar as control bar

I have to set the volume of a video that is contained in a VideoView. I have to use a SeekBar(I already know how to work with SeekBars, I just would like to know how to set the volume of the video).
I also have to use another SeekBar as controll bar.
This is my code:
positionBar = (SeekBar) this.findViewById(R.id.seekBar2);
volumeBar = (SeekBar) this.findViewById(R.id.seekBar);
//getting the max volume and the current volume to set the volume bar
audioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
maxVolume = audioManager.getStreamMaxVolume(AudioManager.USE_DEFAULT_STREAM_TYPE);
currentVolume = audioManager.getStreamVolume(AudioManager.USE_DEFAULT_STREAM_TYPE);
volumeBar.setMax(maxVolume);
volumeBar.setProgress(currentVolume);
//putting the video to execute in the video view
videoPlayer.setVideoPath("android.resource://" + getPackageName() + "/" + R.raw.video);
//volume bar listener
volumeBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
#Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
}
#Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
#Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
//********************************************************************
//position bar listener
positionBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
#Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
}
#Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
#Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
//********************************************************************
//timer to update the position bar during the video execution
//and the volume
new Timer().scheduleAtFixedRate(new TimerTask() {
#Override
public void run() {
currentVolume = audioManager.getStreamVolume(AudioManager.USE_DEFAULT_STREAM_TYPE);
volumeBar.setProgress(currentVolume);
}
}, 0 , 500);
//********************************************************************
Check Below Code, To set the volume of the video programatically.
SeekBar volumeBar;
int volumeLevel;
AudioManager audioManager;
ImageView volumnBtn;
#Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
.....
.....
volumeBar = (SeekBar) findViewById(R.id.volumeBar);
audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
volumeBar.setMax(audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
volumeLevel = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
volumnBtn = (ImageView) findViewById(R.id.volumnBtn);
if (volumeLevel == 0) {
volumnBtn.setImageDrawable(getResources().getDrawable(R.drawable.volumnMute));
} else {
volumnBtn.setImageDrawable(getResources().getDrawable(R.drawable.volumnHigh));
}
iv_volumn_btn.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
volumeLevel = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
volumeBar.setProgress(volumeLevel);
if (volumeBar.getVisibility() == View.GONE) {
volumeBar.setVisibility(View.VISIBLE);
} else {
volumeBar.setVisibility(View.GONE);
}
}
});
volumeBar.setProgress(volumeLevel);
volumeBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
#Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
volumeLevel = i;
if (volumeLevel == 0) {
volumnBtn.setImageDrawable(getResources().getDrawable(R.drawable.volumnMute));
} else {
volumnBtn.setImageDrawable(getResources().getDrawable(R.drawable.volumnHigh));
}
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volumeLevel, 0);
}
#Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
#Override
public void onStopTrackingTouch(SeekBar seekBar) {
volumeBar.setVisibility(View.GONE);
if (volumeLevel == 0) {
volumnBtn.setImageDrawable(getResources().getDrawable(R.drawable.volumnMute));
} else {
volumnBtn.setImageDrawable(getResources().getDrawable(R.drawable.volumnHigh));
}
}
});
}
use SeekBar.getProgress() to get value of your seekbar,and then use the value to set volume,in onProgressChanged method.

changing brightness in android programmatically

when writing code for changing brightness programmatically in android studio, setContentView, getContentResolver, ChangeBright, findViewById and getWindow are in red. it says cannot resolve method. why is that so?
private SeekBar brightbar;
private int brightness;
private ContentResolver Conresolver;
private Window window;
#Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tab3);
brightbar = (SeekBar) findViewById(R.id.ChangeBright);
Conresolver = getContentResolver();
window = getWindow();
brightbar.setMax(255);
brightbar.setKeyProgressIncrement(1);
try
{
brightness = System.getInt(Conresolver, System.SCREEN_BRIGHTNESS);
}
catch (SettingNotFoundException e)
{
Log.e("Error", "Cannot access system brightness");
e.printStackTrace();
}
brightbar.setProgress(brightness);
brightbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
{
public void onStopTrackingTouch(SeekBar seekBar)
{
System.putInt(Conresolver, System.SCREEN_BRIGHTNESS, brightness);
LayoutParams layoutpars = window.getAttributes();
layoutpars.screenBrightness = brightness / (float)255;
window.setAttributes(layoutpars);
}
public void onStartTrackingTouch(SeekBar seekBar)
{
}
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
{
if(progress<=20)
{
brightness=20;
}
else
{
brightness = progress;
}
Are you sure that your code extends Activity?

Set volume using seekbar [duplicate]

How can I accurately change the volume of my app using a seekbar without controlling the volume by the volume buttons on my android device? I have seperate function on the Volume keys on my android that's why I want to use a seekbar to control the volume. Can Anyone please help me?
Please look at below code . It solves your problem.
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();
}
}
#CommonsWare do it like this in https://github.com/commonsguy/cw-omnibus/tree/master/SystemServices/Volume and also set five types of volume using SeekBar
Handling five different types of 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
}
});
}
}
And for controlling only Volume use only
music=(SeekBar)findViewById(R.id.music); and initBar(music, AudioManager.STREAM_MUSIC);
This is a custom View I've used to adjust the volume level. It works by sliding your finger up, but you could easily change that.
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);
}
}
Using it - make sure you implement OnValueChangeListener.
SliderView mSlider;
mSlider= (SliderView) findViewById(id);
mSlider.setOnValueChangeListener(this);
mSlider.setMax(mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
It's not exactly what you're asking for, but it should definitely help you out, I think.
private AudioManager audioManager;
private SeekBar seekBarSound;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
seekBarSound = findViewById(R.id.seekbar_sound);
try {
setVolumeControlStream(AudioManager.STREAM_MUSIC);
audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
seekBarSound.setMax(audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
seekBarSound.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC));
seekBarSound.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
#Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, i, 0);
}
#Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
#Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
sync with volume key:
#Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP){
seekBarSound.setProgress((seekBarSound.getProgress()+1>seekBarSound.getMax())?seekBarSound.getMax():seekBarSound.getProgress()+1);
}else if (keyCode==KeyEvent.KEYCODE_VOLUME_DOWN){
seekBarSound.setProgress((seekBarSound.getProgress()-1<0)?0:seekBarSound.getProgress()-1);
}
return super.onKeyDown(keyCode, event);
}
I added some clear notes for you so you'll understand the logics of every line good luck!
MediaPlayer mediaPlayer;
AudioManager audioManager;
//start the video when clicked.
public void pButton(View view){
mediaPlayer.start();
}
//pause the audio when clicked.
public void pause(View view){
mediaPlayer.pause();
}
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//definning the audio manager as an audio service.
audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
//setting an integer with the value of the max volume of every device.
int maxVolume= audioManager.getStreamMaxVolume(audioManager.STREAM_MUSIC);
//getting the current volume.
int currentVol = audioManager.getStreamVolume(audioManager.STREAM_MUSIC);
//setting the audio at the app setup so we wont nned to write this line in every method.
mediaPlayer = MediaPlayer.create(this,R.raw.allofme);
SeekBar volumeC = (SeekBar) findViewById(R.id.volSeekBar);
//setting the limit of the seek bar from its default 100 to the device max.
volumeC.setMax(maxVolume);
//setting the current value int to match with the seek bar.
volumeC.setProgress(currentVol);
//setting a listener to check the seekbar stats at all changes.
volumeC.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
#Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
Log.i("Seek Bar change:", Integer.toString(progress));
/*setting the audio manager to stream music with the value of the current integer
from the seek bar*/
audioManager.setStreamVolume(audioManager.STREAM_MUSIC ,progress ,0);
}
#Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
#Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
I am having problem of volume set 0 when initialize
I have fixed problem by using below code
volumeManager.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
#Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
if(b){
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, i, 0);
}
}
#Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
#Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
Volume Seekbar with changing Percentage text(100 % )
create a java class and paste all the below code
public class Volume_Dialog extends AppCompatDialogFragment {
private ImageView cross;
private TextView volume_no;
private SeekBar seekBar;
AudioManager audioManager;
#SuppressLint("SetTextI18n")
#NonNull
#Override
public Dialog onCreateDialog(#Nullable Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.volume_popup, null);
builder.setView(view);
getActivity().setVolumeControlStream(AudioManager.STREAM_MUSIC);
cross = view.findViewById(R.id.volume_cross);
volume_no = view.findViewById(R.id.volume_number);
seekBar = view.findViewById(R.id.volume_seekbar);
audioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
seekBar.setMax(audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
seekBar.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC));
int mediavolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
int maxVol = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
double volPerc = Math.ceil((((double) mediavolume / (double) maxVol) * (double) 100));
volume_no.setText(volPerc+" %");
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
#Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
int mediavolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
int maxVol = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
double volPerc = Math.ceil((((double) mediavolume / (double) maxVol) * (double) 100));
volume_no.setText(volPerc+" %");
}
#Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
#Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
cross.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
dismiss();
}
});
return builder.create();
}}
Now call this java class in MainActivity in any onclick method. Thats it
Volume_Dialog volume_dialog = new Volume_Dialog();
volume_dialog.show(getSupportFragmentManager(), "popup dialog");

Using SeekBar to Control Volume in android?

How can I accurately change the volume of my app using a seekbar without controlling the volume by the volume buttons on my android device? I have seperate function on the Volume keys on my android that's why I want to use a seekbar to control the volume. Can Anyone please help me?
Please look at below code . It solves your problem.
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();
}
}
#CommonsWare do it like this in https://github.com/commonsguy/cw-omnibus/tree/master/SystemServices/Volume and also set five types of volume using SeekBar
Handling five different types of 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
}
});
}
}
And for controlling only Volume use only
music=(SeekBar)findViewById(R.id.music); and initBar(music, AudioManager.STREAM_MUSIC);
This is a custom View I've used to adjust the volume level. It works by sliding your finger up, but you could easily change that.
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);
}
}
Using it - make sure you implement OnValueChangeListener.
SliderView mSlider;
mSlider= (SliderView) findViewById(id);
mSlider.setOnValueChangeListener(this);
mSlider.setMax(mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
It's not exactly what you're asking for, but it should definitely help you out, I think.
private AudioManager audioManager;
private SeekBar seekBarSound;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
seekBarSound = findViewById(R.id.seekbar_sound);
try {
setVolumeControlStream(AudioManager.STREAM_MUSIC);
audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
seekBarSound.setMax(audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
seekBarSound.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC));
seekBarSound.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
#Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, i, 0);
}
#Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
#Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
sync with volume key:
#Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP){
seekBarSound.setProgress((seekBarSound.getProgress()+1>seekBarSound.getMax())?seekBarSound.getMax():seekBarSound.getProgress()+1);
}else if (keyCode==KeyEvent.KEYCODE_VOLUME_DOWN){
seekBarSound.setProgress((seekBarSound.getProgress()-1<0)?0:seekBarSound.getProgress()-1);
}
return super.onKeyDown(keyCode, event);
}
I added some clear notes for you so you'll understand the logics of every line good luck!
MediaPlayer mediaPlayer;
AudioManager audioManager;
//start the video when clicked.
public void pButton(View view){
mediaPlayer.start();
}
//pause the audio when clicked.
public void pause(View view){
mediaPlayer.pause();
}
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//definning the audio manager as an audio service.
audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
//setting an integer with the value of the max volume of every device.
int maxVolume= audioManager.getStreamMaxVolume(audioManager.STREAM_MUSIC);
//getting the current volume.
int currentVol = audioManager.getStreamVolume(audioManager.STREAM_MUSIC);
//setting the audio at the app setup so we wont nned to write this line in every method.
mediaPlayer = MediaPlayer.create(this,R.raw.allofme);
SeekBar volumeC = (SeekBar) findViewById(R.id.volSeekBar);
//setting the limit of the seek bar from its default 100 to the device max.
volumeC.setMax(maxVolume);
//setting the current value int to match with the seek bar.
volumeC.setProgress(currentVol);
//setting a listener to check the seekbar stats at all changes.
volumeC.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
#Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
Log.i("Seek Bar change:", Integer.toString(progress));
/*setting the audio manager to stream music with the value of the current integer
from the seek bar*/
audioManager.setStreamVolume(audioManager.STREAM_MUSIC ,progress ,0);
}
#Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
#Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
I am having problem of volume set 0 when initialize
I have fixed problem by using below code
volumeManager.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
#Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
if(b){
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, i, 0);
}
}
#Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
#Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
Volume Seekbar with changing Percentage text(100 % )
create a java class and paste all the below code
public class Volume_Dialog extends AppCompatDialogFragment {
private ImageView cross;
private TextView volume_no;
private SeekBar seekBar;
AudioManager audioManager;
#SuppressLint("SetTextI18n")
#NonNull
#Override
public Dialog onCreateDialog(#Nullable Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.volume_popup, null);
builder.setView(view);
getActivity().setVolumeControlStream(AudioManager.STREAM_MUSIC);
cross = view.findViewById(R.id.volume_cross);
volume_no = view.findViewById(R.id.volume_number);
seekBar = view.findViewById(R.id.volume_seekbar);
audioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
seekBar.setMax(audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
seekBar.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC));
int mediavolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
int maxVol = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
double volPerc = Math.ceil((((double) mediavolume / (double) maxVol) * (double) 100));
volume_no.setText(volPerc+" %");
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
#Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
int mediavolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
int maxVol = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
double volPerc = Math.ceil((((double) mediavolume / (double) maxVol) * (double) 100));
volume_no.setText(volPerc+" %");
}
#Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
#Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
cross.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
dismiss();
}
});
return builder.create();
}}
Now call this java class in MainActivity in any onclick method. Thats it
Volume_Dialog volume_dialog = new Volume_Dialog();
volume_dialog.show(getSupportFragmentManager(), "popup dialog");

Categories

Resources