BLOG main image
분류 전체보기 (7)
Development (7)
ppsspp roms
ppsspp roms
Pool Live Tour Cheats
Pool Live Tour Cheats
battle pirates hack
battle pirates hack
subway surfers cheat codes
subway surfers cheat codes
click the next internet page
click the next internet page
69,522 Visitors up to today!
Today 7 hit, Yesterday 6 hit
daisy rss
tistory 티스토리 가입하기!
2010.12.06 23:56

안드로이드에는 기본적으로 내장된 MusicPlayer가 존재한다.
이 MusicPlayer 어플리케이션은 음악 연주를 위한 Service를 구현하여 UI와 연동하도록 설계되어 있다.
이번 글에서는 앞선 글의 예제를 수정해 MediaPlayBack Service를 이용해 오디오를 재생하는 방법을 살펴보겠다. 이전 글 참조

안드로이드 전체 소스를 받았다면, package/apps/music 안의 디렉토리에 있는 androidmainifeset.xml파일 내에서, 아래와 같이 서비스로 정의된 클래스를 볼 수 있을 것이다.




위의 com.android.music.MediaPlaybackService이 바로 이번 글에서 사용하려고 하는 Service Class이다.

주요한 정보는 다음과 같다.

  • MediaPlayer의 Package명 : com.android.music
  • MediaPlayBack Service의 클래스명 : com.android.music.MediaPlayBackService

  • Service를 사용하기 위해서는 먼저 Bind를 해 주어야 하는데, 이 때 사용되는 API가 bindService이다.
    public abstract boolean bindService (Intent service, ServiceConnection conn, int flags)

    첫번째, 인자가 intent, 두번째 인자는 bindService를 비동기로 연결을 맺어줄 Connection 클래스, 세번째 인자가 Bind를 할 때 사용할 추가적인 옵션을 의미한다.

    실제 코드 구현은 다음과 같다.
            Intent i = new Intent();
            i.setClassName("com.android.music", "com.android.music.MediaPlaybackService");
            bindService(i, mConnection, BIND_AUTO_CREATE);
    
    
    앞에서 말한 MediaPlayer Package명과 Service 클래스명을 intent에 설정하고, mConnection과 BIND_AUTO_CREATE를 인자로 넘겨준다. BIND_AUTO_CREATE는 서비스가 아직 실행중이 아니라면, 서비스를 생성한 후 bind를 해 주는 옵션이다.

    mConnection 클래스의 구현은 아래와 같다.
        
        private class MediaPlayerServiceConnection implements ServiceConnection {    	
        	public void onServiceConnected(ComponentName name, IBinder service) {
           		Log.i("MediaPlayerServiceConnection", "Connected!");
           	 
           		/* Get interface for MediaPlayback Service */
           		mMediaService = IMediaPlaybackService.Stub.asInterface(service);
    
        		try {
        		} catch (Exception e) {
            		e.printStackTrace();
            		throw new RuntimeException(e);
        		}
        	}
    
        	public void onServiceDisconnected(ComponentName name) {
        		Log.i("MediaPlayerServiceConnection", "Disconnected!");
        	}
        }
        
    
    Service 연결이 되었을때, mMediaService에 얻어진 Service의 Interface를 넣어주는 역할을 하게 된다.

    mMediaService의 정의는 
        private IMediaPlaybackService mMediaService;
        
    
    이다.

    IMediaPlaybackService는 aidl(Android Interface Definition Language)로 MediaPlayerBack Service의 Interface를 정의한 파일인데, 전형적인 RPC를 지원하기 위한 IDL파일의 Java (Android) 버전으로 보면 된다. 이 파일은 Android 소스의 package/apps/music/com/android/music 폴더안에 있는데, 풀소스를 다운받지 못했다면 다음의 링크에서 다운받을 수 있다. 

    이 파일을 IMediaPlayBackService.aidl로 저장한 후 사용하려고 하는 프로젝트의 src/com/android/music 디렉토리에 저장 한 후 Eclipse에서 F5나 Refresh를 해 주면 프로젝트에 추가된다.

    위의 bindService로 연결된 후, mMediaService를 통해  IMediaPlayBackService.aidl에 있는 Service 메소드들을 사용할 수 있게 된다.

    PlayBack을 위한 메소드 playMusicService를 아래와 같이 추가해 준다.
        public void playMusicService(int id) {
        	try {
        		/* 첫번째 인자를 Media ID로 이루어진
        		 *  Array를 넘기면 Play 리스트를 연주하게 된다.
        		 */
    			mMediaService.open(new long [] {id}, 0);
    			mMediaService.play();
        	} catch (RemoteException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
        } 
        
    
    그리고, play 를 시작하던 부분을 다음과 같이 수정해준다
            playMusicService(mMusicAdapter.getMusicID(position));
            
    

    연주가 시작되면 특이하게 Statusbar 영역에 play 상태가 표시되며, Statusbar를 아래로 드래그 했을때, 정보가 나오게 된다. 이는 안드로이드 Statusbar Service가 MediaPlayback Service와 연동하도록 설계되어 있기 때문이다.






    Source Download : 
                            
    [※ 본 글은 Android 2.2 Froyo 기준으로 작성 및 작동을 확인 하였습니다. Android 2.3 GingerBread 이상에서는 Music 앱에 포함되었던 MeidaPlaybackService의 Export 옵션이 False로 바뀌어서 동작되지 않습니다.]

     
    repair iphone | 2011.06.15 21:25 신고 | PERMALINK | EDIT/DEL | REPLY
    좋은 글 잘 보고 갑니다. 다음에도 또 좋은 글 기대 할께요. 퍼가도 되죠?
    chaboom | 2011.07.25 15:41 신고 | PERMALINK | EDIT/DEL | REPLY
    열심히 테스트 해보고 있었는데.

    제가 중요한 문구를 놓치고 있었네요. -_-;

    2.3부터는 동작되지 않습니다. ㅠㅠ

    하지만 좋은 글 감사합니다!!
    Домен Name | 2013.01.03 23:44 신고 | PERMALINK | EDIT/DEL | REPLY
    감사합니다
    moncler | 2013.01.04 15:25 신고 | PERMALINK | EDIT/DEL | REPLY
    Le ministre de la Santé Xavier Bertrand a estimé mercredi que lorsque des médicaments posent problème, http://www.moncleroutletespain.com/ moncler españa, comme c'est le cas pour ceux pointés par la revue Prescrire, http://www.moncleroutletespain.com/ moncler online, des décisions doivent être prises "dans des délais plus rapprochés", http://www.moncleroutletespain.com/ moncler.Related articles:


    http://solmoli.tistory.com/20 http://solmoli.tistory.com/20

    http://pundanabanana.tistory.com/21 http://pundanabanana.tistory.com/21
    moncler españa | 2013.01.04 16:39 신고 | PERMALINK | EDIT/DEL | REPLY
    Lors d'une rare visite mardi à Juba, la capitale du Sud-Soudan, le président soudanais Omar el-Béchir a assuré qu'il célèbrerait le résultat du référendum de dimanche, http://www.moncleroutletespain.com/ http://www.moncleroutletespain.com/, même s'il débouchait sur la sécession. "Je célèbrerai votre décision, http://www.moncleroutletespain.com/ moncler, même si vous choisissez la sécession", a-t-il déclaré dans un discours prononcé devant de nombreux responsables sudistes et retransmis en direct sur la télévision d'Etat.Près de quatre millions de personnes (3, http://www.moncleroutletespain.com/ moncler chaquetas,75 millions au Sud, 116, http://www.moncleroutletespain.com/ moncler outlet.000 au Nord et 60.000 à l'étranger) se sont inscrites sur les listes électorales en vue du référendum prévu du 9 au 15 janvier, http://www.moncleroutletespain.com/ moncler españa, aboutissement de l'accord de paix qui a mis fin à la guerre civile en 2005, http://www.moncleroutletespain.com/ moncler online.Related articles:


    http://tellyoumore.tistory.com/249 http://tellyoumore.tistory.com/249

    http://deathnote3.tistory.com/32 http://deathnote3.tistory.com/32
    moncler españa | 2013.01.05 20:36 신고 | PERMALINK | EDIT/DEL | REPLY
    Alors qu'il n'était jusqu'à présent disponible que depuis une PS3, une PSP ou une PS Vita, le PlayStation Store fait enfin son entrée directement dans le navigateur Internet de votre ordinateur PC, http://www.moncleroutletespain.com/ moncler chaquetas, Mac ou whatever. Ca se passe par ici et ?a vous permet de consulter tout le contenu disponible, acheter vos jeux, http://www.moncleroutletespain.com/ moncler outlet, films et séries, consulter les offres PlayStation Plus, http://www.moncleroutletespain.com/ moncler españa, etc.Il suffit de vous identifier avec votre compte SEN (Sony Online Entertainment) habituel, http://www.moncleroutletespain.com/ http://www.moncleroutletespain.com/, puis de faire chauffer votre carte de crédit. Tous les achats iront dans votre liste de téléchargements et ces derniers pourront ensuite être lancés depuis votre (vos) console(s). Easy, http://www.moncleroutletespain.com/ moncler online. Retrouvez cet article sur gameblog.frDevenez fan de Yahoo! Actu sur Facebook et suivez-nous sur Twitter, http://www.moncleroutletespain.com/ moncler.Related articles:


    http://infocusclub.com/209 http://infocusclub.com/209

    http://infocusclub.com/215 http://infocusclub.com/215
    Name
    Password
    Homepage
    Secret