마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

버튼 터치시 sound 볼륨 증가, 아닐 때 감소를 하려고 하는데 어떻게 해야 될지...

0 추천


import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.os.Environment;
import android.app.Activity;
import android.content.Context;
import android.media.MediaPlayer;
import android.media.AudioManager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.util.Log;
import android.util.AttributeSet;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;

public class SoundRacerActivity extends Activity implements
  View.OnTouchListener {

 private Button acceleratorUp;
 private Button acceleratorDown;
 private Toast failToast;
 private Handler mHandler = new Handler();;
 private MediaPlayer exhaust_sound;
 private Context context;
 //private SeekBar seekVol;
 AudioManager audioManager;

 private boolean volumUpRunning = false;
 private boolean cancelVolumUpThread = false;

 String dirPath = "/SoundRacer";
 String path = Environment.getDataDirectory().getAbsolutePath();

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  acceleratorUp = (Button) findViewById(R.id.acceleratorUp);
  acceleratorUp.setOnTouchListener(this);
  acceleratorUp.setPressed(false);
  acceleratorUp.setBackgroundResource(R.drawable.dd);

  // acceleratorDown = (Button) findViewById(R.id.acceleratorDown);
  // acceleratorDown.setVisibility(View.GONE);

  // acceleratorDown.setOnClickListener(this);

  //seekVol = (SeekBar) findViewById(R.id.bar);
  //seekVol.setVisibility(View.GONE);

  mHandler = new Handler() {
   @Override
   public void handleMessage(Message msg) {

    if (msg.what == 1) {
     // Set button to display current status
     acceleratorUp.setPressed(false);
     acceleratorUp.setBackgroundResource(R.drawable.dd);

    } else {
     // Connection failed
     failToast.show();
    }
   }
  };

  this.getResources().openRawResource(R.raw.enzo_ferrari);
  exhaust_sound = MediaPlayer.create(this, R.raw.enzo_ferrari);
  exhaust_sound.setAudioStreamType(AudioManager.STREAM_MUSIC);
  exhaust_sound.setLooping(true);
  exhaust_sound.start();

  /*
   * File file = new File(path+dirPath);
   * 
   * if (!file.exists()) { file.mkdirs(); }
   */

 }

 /*
  * @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the
  * menu; this adds items to the action bar if it is present.
  * getMenuInflater().inflate(R.menu.sound_racer, menu); return true; }
  */

/* public void volumUp() {

  audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

  int currVol = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
  int maxVol = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);

  audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
    AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);

 }

 public void volumDown() {

  audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

  int currVol = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);

  Log.d("VOL", "CURRENT VOL = " + currVol);

  audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
    AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI);

 }*/

 //int currVol = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
 //int maxVol = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
 //int volum;

 @Override
 public boolean onTouch(View v, MotionEvent event) {
  // TODO Auto-generated method stub

  audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
  int currVol = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
  int maxVol = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);

  //seekVol.setMax(maxVol);

  if (event.getAction() == MotionEvent.ACTION_DOWN) {

   acceleratorUp.setPressed(true);
   acceleratorUp.setBackgroundResource(R.drawable.pp);
   audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
     AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);

   /*seekVol.setProgress(volum);
   seekVol.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress,
      boolean fromUser) {
     // TODO Auto-generated method stub
     audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
       progress, AudioManager.FLAG_SHOW_UI);
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
     // TODO Auto-generated method stub

    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
     // TODO Auto-generated method stub

    }

   });*/

   // volumUp();

   return true;

  } else if (event.getAction() == MotionEvent.ACTION_UP) {

   acceleratorUp.setPressed(false);
   acceleratorUp.setBackgroundResource(R.drawable.dd);
   
   audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
     AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI);
   /*seekVol.setProgress(volum);

   seekVol.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress,
      boolean fromUser) {
     // TODO Auto-generated method stub
     audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
       progress, AudioManager.FLAG_SHOW_UI);
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
     // TODO Auto-generated method stub

    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
     // TODO Auto-generated method stub

    }

   });*/

   // volumDown();

   return true;
  }

  return false;
 }

}

현재 버튼을 터치를 하면 sound 볼륨 증가를 하고 터치를 하지 않을 때는 감소 하는 것을 하려고 합니다.

seekBar를 이용하여 터치 시에 seekBar가 증가 하고 이런 것도 해 보았고, 오토 클릭을 하려고 하였지만 이해 부족으로

계속 오류가 생깁니다. 좋은 방법이 있으면 알려주시면 감사하겠습니다. ㅜㅜ

현재 소스 코드 입니다.

 

 

 

안왕초보 (1,390 포인트) 님이 2014년 2월 10일 질문
목적을 좀 더 구체화 시켜주세요
버튼을 터치하면 볼륨증가고 터치하지않을때 볼륨감소면..
터치하지않을때가 주(일반적인상황) 이고,
버튼터치할때가 부(특정상황)인데
버튼을 터치하지않는 순간에는 지속적으로 볼륨을 감소해야하니
작업스레드로 계속 감소시킨다치면 버튼을 터치해서 볼륨업하는 의미가 있나용? 볼륨업 효과도 못보고 다시 깎일텐뎅? ㅇㅅㅇ?
일정 볼륨까지만 떨어지고 안 떨어지는 것으로 만들려고 합니다.

1개의 답변

0 추천

일정 볼륨까지만 떨어지고 아니고를 떠나서;; 조건이 모순된다니까요..?

어차피 볼륨도 민맥스 있어서 그 값이상이하로 안변하는건 당연한거고

기본이 음소거로 계속 만드는 상태인데 버튼을 눌렀을 때 볼륨업이면 계속 상쇄되잖아용?

아니면 버튼을 눌렀을때 몇초간은 감소를 안하게 한다던가 플래그를 둔다던가

그런게 있어야할거같은뎅?

무슨 작업을 하시려고 그런  조건을 구상하셨는지 모르겠지만..

다시 한번 생각해보세요~ 제가 글쓴님 의도를 모르겟어요 ;;

단순 볼륨 증가 감소하는 건 아래 링크를 참고하시고 글쓴이님 하려는 일은 여기서 살짝 응용만 하면될거에요

일단 오류뷰터 안나도록 기본 기능 구현하시고 하세요.

http://drcarter.tistory.com/93

글쓴이님 말대로 코딩을 하면... 그 확인은 로그 찍어서 기능 수행되나 안되나만 확인해보면 되는 건가요?

ㅇ_ㅇ????

초보개발자ㅠ (33,870 포인트) 님이 2014년 2월 11일 답변
단숨 볼륨 증가 감소는 할 줄 압니다. count를 줘서 볼륨 증가를 하고 textview에 count 증가도 보여 주려고 하는 것입니다.
간단하게 예제코드 작성했으니 참고하세요

package com.example.buttonevent;

import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

    Button bt;
    TextView tv;
    int count = 0;
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
        bt = (Button)findViewById(R.id.button1);
        tv = (TextView)findViewById(R.id.textView1);
       
        BackThread thread = new BackThread();
        thread.setDaemon(true);
        thread.start();
    }
   
    class BackThread extends Thread {
        public void run(){
            while(true){
                if(bt.isPressed())
                {
                    count++;
                }
                else
                {
                    if(count!=0)
                    count--;
                }
                handler.sendEmptyMessage(0);
                try{
                    Thread.sleep(1000);
                } catch (InterruptedException e){
                   
                }
            }
        }
    }
   
    public Handler handler = new Handler(){      
        public void handleMessage(Message msg){
            if(msg.what==0)
               tv.setText(""+count);
        }
    };
}
...