본문 바로가기

아옳옳의 코딩공부/아옳옳의 안드로이드스튜디오

2021-06-10안드로이드 스튜디오 (멀티미디어 이용하기)

반응형

오디오 재생하기 

@어플리케이션에서 백그라운드에서 노래나 멜로디가 나오게 도와주는 클래스 MediaPlayer

 

방법은 3가지가 있다

1) 웹상에 위치를 지정하기 

변수에 미디어가 있는 웹 경로를 지정하여 하는방법 

 

2)프로젝트 파일에 포함한 후 위치 지정 (어플리케이션 무게가 커지긴 하는데 어쩔수 없다 ) 

에셋(assets) 폴더에 넣은후 위치를 지정

 

3) 단말 SD카드에 넣은후 위치 지정 

단말에 넣어 둔 SD카드에 파일을 넣은 후 그 위치를 지정

 

음악파일의 재생과정은 다음과 같다 . 

실 코딩 화면

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    //웹상의 경로 지정 하여 할때 이렇게 경로를 지정 해준다
    static final String AUDIO_URL = "https://sites.google.com/site/ubiaccessmobile/sample_audio.amr";


    Button btn_Start, btn_Pause, btn_Restart;
    MediaPlayer mediaPlayer;
    int position;
    String filePath;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //위험 권한은 인터넷에서 가져올땐 필요가 없다 하지만 sd 카드 접근할땐 필요함 매니패스트도 추가해줘야 한다.
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
                Manifest.permission.READ_EXTERNAL_STORAGE}, 0);

        btn_Start = findViewById(R.id.button);
        btn_Pause = findViewById(R.id.button2);
        btn_Restart = findViewById(R.id.button3);

        btn_Pause.setOnClickListener(this);
        btn_Restart.setOnClickListener(this);
        btn_Start.setOnClickListener(this);


        //절대 경로를 가져오기 위한 기본구조는
        //Environment.getExternalStorageDirectory().getAbsolutePath();
        //=> 외부 스토리지 최상위 주소를 나타낸다.
         //여기에서 직접 만든 폴더를 이용하고 싶으면 뒤에다가 /폴더명을 추가 하면 된다
        filePath = Environment.getExternalStorageDirectory().getAbsolutePath()+"/Download/sleep.mp3";
    }

    @Override
    public void onClick(View v) {

        if (v == btn_Start) {
            try {
                playAudio(filePath);
            } catch (IOException e) {
                e.printStackTrace();
            }

        } else if (v == btn_Pause) {
            if (mediaPlayer != null && mediaPlayer.isPlaying()) {
                //mediaPlayer.getCurrentPosition()
                //현재 플레이중인 미디어에 진행 상황을 int 값으로 얻어오는 메소드이다.
                //seekTo에서 다시 실행시키기 위하여 받아옴 
                position = mediaPlayer.getCurrentPosition();
                //미디어 플레이어 정지
                mediaPlayer.pause();
            }
        } else if (v == btn_Restart) {

            if (mediaPlayer != null &&! mediaPlayer.isPlaying()) {
                //mediaPlayer.seekTo(여기 값으로 이동함);
                //
                mediaPlayer.seekTo(position);
                mediaPlayer.start();
            }
        }

    }
// 인테넷에서 받아와서 사용할때와 절대 경로로 찾아 가기
    private void playAudio(String filePath) throws IOException {
        killplayer();
        mediaPlayer = new MediaPlayer();
        mediaPlayer.setDataSource(filePath);
        //mediaPlayer.prepare(); 준비 하기
        mediaPlayer.prepare();
        //mediaPlayer.start(); 시작
        mediaPlayer.start();

    }

//    파일 저장해서 했음 raw 폴더에 있는 파일 가져다 쓰기
//  private void playAudio() throws IOException {
//        killplayer();
//        mediaPlayer = MediaPlayer.create(this,R.raw.sleep);
//        mediaPlayer.start();

   // }

    private void killplayer() {
        if (mediaPlayer != null) {
            //mediaPlayer.release(); 해제하기
            mediaPlayer.release();

        }
    }
}

 

동영상 재생하기 

@VideoView 와 MediaController 빼면 오디오와 비슷하다 . 

public class MainActivity extends AppCompatActivity {
    //인터넷 상의 경로 지정
    static final String VIDEO_URL = "http://sites.google.com/site/ubiaccessmobile/sample_video.mp4";

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

        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
                Manifest.permission.READ_EXTERNAL_STORAGE}, 0);

        Button btnStart = findViewById(R.id.button);
        Button btnvol = findViewById(R.id.button2);
        VideoView videoView = findViewById(R.id.videoView);
        //sd카드 파일 경로 얻어오기
        String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Download/mv.mp4";

        MediaController mc = new MediaController(this); 
        //videoView에 미디어 컨트롤러 설정 
        videoView.setMediaController(mc);
        
        //url 으로 지정하여 하는법 
        //videoView.setVideoURI(Uri.parse(VIDEO_URL));
        
        //videoView 객체에 재생할 동영상 url 설정 
        videoView.setVideoPath(filePath);
        videoView.requestFocus();

        //비디오 준비 완료 되면 호출 메소드
        videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                Toast.makeText(MainActivity.this, "동영상준비완료 ", Toast.LENGTH_LONG).show();
            }
        });
        //비디오
        videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                Toast.makeText(MainActivity.this, "동영상재생완료 ", Toast.LENGTH_LONG).show();
            }
        });

        btnStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                videoView.seekTo(0);
                videoView.start();
            }
        });

        btnvol.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AudioManager manager = (AudioManager) getSystemService(AUDIO_SERVICE);
                int max = manager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
                manager.setStreamVolume(AudioManager.STREAM_MUSIC, max, AudioManager.FLAG_SHOW_UI);
            }
        });
    }
}

 

반응형