Notice
Recent Posts
Recent Comments
Link
관리 메뉴

설.현.아빠

Chapter 3 - 2 ] MP3 음악 파일의 재생 기능 추가. 본문

교재 & 강좌/시작하세요! 안드로이드 프로그래밍

Chapter 3 - 2 ] MP3 음악 파일의 재생 기능 추가.

설.현.아빠 2011. 2. 11. 11:56



이거이거 초반 부터 너무 달리는거 아냐..이 책은 좀...안드로이드를 1~2달 정도 접해본 사람이 봐야할 책같다.

개인적으로는 알짜만 골라 배우는 안드로이드 프로그래밍 2가 초보자를 위해서는 좋은듯..^^(기초부터 차근차근..)

 

안드로이드의 매체 재생 기능들은 android.media Package의 MediaPlayer Class가 제공한다.

자바는 참 제공을 많이해줘...내가 알던 C랑은 많이 달라. 친절해서 고맙지만 때론 그 친절함이 내 발목을 잡지...

제공 하면 멀하나...어떻게 쓰는지를 모르는데..

 

먼저 주요 메소드들을 알아 보자.

MediaPlayer.create() - 주어진 대상을 재생할 새 매체 재생기를 생성한다.

MediaPlayer.start() - 시작

MediaPlayer.stop() - 멈춤

MediaPlayer.release() - 매체 재생기의 자원들을 해제.

Uri.parse() - 적절히 서식화된 URI 주소로부터 Uri 객체를 인스턴스화한다..(이건 머..아무때나 막나오는구만..)

 

 

<?xml version="1.0" encoding="utf-8"?>

<!-- AndroidManifest.xml -->

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.android.MyFirstAndroidApp"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name"

                       android:debuggable="true">
        <activity android:name=".MyFirstAndroidApp"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
    <uses-sdk android:minSdkVersion="8" />
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>

 

 

package com.android.MyFirstAndroidApp;

import android.app.Activity;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;

public class MyFirstAndroidApp extends Activity {
    private MediaPlayer mp3;
    @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  playMusicFromSDcard();
 }

    // Uri객체와 MediaPlayer객체를 생성하고, MP3를 재생한다.
 public void playMusicFromSDcard() {
  try {
   Uri file = Uri.parse("file:///sdcard/our_last_summer_small.mp3");
   mp3 = MediaPlayer.create(this, file);
   mp3.start();
  } catch (Exception e) {
   Log.d("Log","player failed",e);
  } {
   
  }
 }

 // 깔끔하게 종료시키기 위해 onStop()구현.
 @Override
 protected void onStop() {
  if(mp3!=null) {
   mp3.stop();
   mp3.release();
  }
  super.onStop();
 }
}

 

 

이런 사기꾼들..인터넷 접속하면서 permission설정도 안하고 하는구나~

초보자들은 그냥 안되는구나...하고 넘어가잖아~

그리고! 달랑 이게 끝은 아니겠지? 뒤에 Chapter로 넘어가다 보면 또 나오겠지? 설마 이렇게 시시하게 끝내나..

 

어째든

알아두기 1 :

단말의 sdcard에 저장된 mp3파일 재생할때는 file:/// 3개..3개..혹시나 하고 2개 넣었더니 안된다...^^

 

 

 

알아두기 2 :

웹상에 존재하는 파일 플레이 방법

Uri file = Uri.parse(http://www.abcd.com/music/abc.mp3);

 

패키지의 assets/audio/abc.mp3플레이

AssetFileDescriptor file = getAssets().openFd("autio/abc.mp3");

MediaPlayer mp3 = new MediaPlayer();

mp3.setDataSource(file.getFileDescriptor(), file.getStartOffset(), file.getLength());

file.close();

mp3.start();

이건 .... 안되네..file.getFileDescriptor()를 통해 파일 정보나 file.getLength()를 통해서 파일 크기는 다 정상적으로 읽히지만..

정작 음악은 안나온다는...ㅠㅠ안해!

 

패키지의 res/raw/oh.mp3플레이

MediaPlayer mp3 = MediaPlayer.create(context, R.raw.abc);

mp3.start();

ㅋㅋ 이건 잘된다~~

 

패키지의 res/raw/oh.mp4플레이

Uri Upath = Uri.parse("android.resource://패키지명/" + R.raw.mp4file);

VideoView videoview = (VideoView)findViewById(R.id.videoView);
MediaController mc = new MediaController(this);

mc.setMediaPlayer(videoview);

videoview.setVideoURI(Upath);

videoview.setMediaController(mc);

videoview.start();

 

파일시스템의 /data/abc.mp3 플레이

MediaPlayer mp3 = new MediaPlayer();

mp3.setDataSource("/data/abc.mp3");

mp3.start();

또 뻥치네..[2010-12-10 17:34:58] Failed to push selection: Permission denied

파일시스템에 data에 파일 어떻게 넣지..요건..쫌..Critical 할 수도 있으니까. PASS!!

 

알아두기 3 : mp4 플레이

VideoView videoview = (VideoView)findViewById(R.id.daumroadviewVideoView);
MediaController mc = new MediaController(this);
mc.setMediaPlayer(videoview);
videoview.setVideoPath("/data/KensCafe_2.mp4");
videoview.setMediaController(mc);
videoview.start();

물론 Emulator로 돌렸을때 정상동작 확인했다..실제 폰에서는 아직 미확인!! Emulator 느려터져쓰~

Comments