본문 바로가기

Android

[Media/Widget만들기/ Service/ Receiver] 단순 media player

반응형

Programing  포스트들은 설명을 위한 포스트가 아닌 개발하면서 적는 기록의 일부입니다. 
 
 
// My Provider.java
 
 
public class MyProvider extends AppWidgetProvider { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
       super.onReceive(context, intent); 
    } 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
            int[] appWidgetIds) { 
        RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.main); 
        //위젯 위에 있는  layout를 컨트롤 하려면 필요  
        //remote view를 통해서만 레이아웃 컨트롤이 가능하다) 
        //remoteViews.setTextViewText(R.id, "success"); 
        Intent setting = new Intent(context, Mp3Service.class); 
        setting.setAction("mp3play"); 
        PendingIntent settingIntent = PendingIntent.getService(context, 0, setting, 0); 
        remoteViews.setOnClickPendingIntent(R.id.ImagePlay, settingIntent); 
         
        Intent settingNext = new Intent(context, Mp3Service.class); 
        settingNext.setAction("mp3next"); 
        PendingIntent settingNextIntent = PendingIntent.getService(context, 0, settingNext, 0); 
        remoteViews.setOnClickPendingIntent(R.id.ImageNext, settingNextIntent); 
         
        Intent settingStop = new Intent(context, Mp3Service.class); 
        settingStop.setAction("mp3stop"); 
        PendingIntent settingStopIntent = PendingIntent.getService(context, 0, settingStop, 0); 
        remoteViews.setOnClickPendingIntent(R.id.ImageStop, settingStopIntent); 
         
        Intent optionsetting = new Intent(context, OptionActivity.class); 
        //액티비티 Get & Listener Set 
        optionsetting.setAction("Option"); 
        PendingIntent OptionIntent = PendingIntent.getActivity(context, 0, optionsetting, 0); 
        remoteViews.setOnClickPendingIntent(R.id.BtnOption, OptionIntent); 
         
        appWidgetManager.updateAppWidget(appWidgetIds, remoteViews); 
         
        Intent service = new Intent(context, Mp3Service.class); 
        context.startService(service); 
         
         
        super.onUpdate(context, appWidgetManager, appWidgetIds); 
    } 
     
    public static class Mp3Service extends Service { 
         
        MP3PlayCtrl ctrl = new MP3PlayCtrl(); 
         
        public class MyBinder extends Binder{ 
            public Mp3Service getService() 
            { 
                return Mp3Service.this; 
            } 
        } 
             
         
        public MyBinder MyBinder = new MyBinder(); 
         
    @Override 
        public IBinder onBind(Intent arg0) { 
           return (IBinder)MyBinder; 
        } 

    @Override 
    public void onStart(Intent intent, int startId) { 
         String szAction = intent.getAction(); 
        //MP3PlayCtrl new  
         
         
        if(szAction != null) 
        { 
            if(szAction.equals("mp3play")) 
            { 
                int i=0; 
                szAction=null; 
                ctrl.PlayMp3("c.mp3"); 
            } 
             
            else if(szAction.equals("mp3next")) 
            { 
                int i=1; 
                szAction=null; 
                ctrl.pauseMp3(); 
            } 
             
            else if(szAction.equals("mp3stop")) 
            { 
                int i=2; 
                szAction=null; 
                ctrl.StopMp3(); 
            } 
        } 
        super.onStart(intent, startId); 
    } 
     
    public void Playmp3(String szPath){ 
        ctrl.PlayMp3("c.mp3"); 
    } 
     
    public void pauseMp3(String szPath){ 
        ctrl.pauseMp3(); 
    } 
     
    public void StopMp3(String szPath){ 
        ctrl.StopMp3(); 
    } 
    } 
     
} 
 
 
// OptionActivity.java
public class OptionActivity extends Activity { 
//    MP3PlayCtrl ctrl = new MP3PlayCtrl(); 
    /* Service ( 백그라운드로 실행)컴포넌트  
     * (여기선 Player 위젯)의 생명주기 컨트롤이 필요하다.   
     * 즉, 아이들(Home screen)에 떠있는 위젯의 동작이 실행된 화면의  
     * 액티비티와 따로 플레이 되지 않게 하기위해서는  
     * Binder를 이용하여  서비스 객체에 커넥션을 만들고 내부를 호출하는  
     * 구조로 만들어 져야한다. 
     * 서비스가 어느것에 의해 시작되던간에 서비스는 잠재적으로 
     * 클라이언트가 바인드 하는 것을 허용 할 수 있기 때문에, 
     * 어떤 서비스 이던지 onBind()와 onBind()를 호출 받을 수 있다 
      */ 
     
    public Mp3Service myService = null; 
     
    ServiceConnection conn = new ServiceConnection(){ 

        @Override 
        public void onServiceConnected(ComponentName arg0, IBinder arg1) {  
            //onBind의 리턴값이 마지막 파라미터로 !  
            myService = ((Mp3Service.MyBinder)arg1).getService(); 
             
        } 

        @Override 
        public void onServiceDisconnected(ComponentName arg0) { 
            // TODO Auto-generated method stub 
             
        } 
         
    }; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
         
        setContentView(R.layout.optionlayout); 
         
        Intent Mp3Service = new Intent(this,MyProvider.Mp3Service.class); 
        // Context 인가가 필요할 경우 Activity를 넣어 사용하여도 무관.  
        // (찾아보지 않았지만 상속받지 않았을까) 
         
         
        bindService(Mp3Service, conn , BIND_AUTO_CREATE); 
         
         
        ImageView imgPlay=(ImageView)findViewById(R.id.ImagePlay); 
        imgPlay.setOnClickListener(new OnClickListener()  
        { 
            @Override 
            public void onClick(View v) { 
                myService.Playmp3("a.mp3"); 
             } 
        }); 
         
         
        ImageView imgpause=(ImageView)findViewById(R.id.ImageStop); 
        imgpause.setOnClickListener(new OnClickListener()  
        { 
            @Override 
            public void onClick(View v) { 
                myService.pauseMp3(""); 
             } 
        }); 
         
        ImageView imgNext=(ImageView)findViewById(R.id.ImageNext); 
        imgNext.setOnClickListener(new OnClickListener()  
        { 
            @Override 
            public void onClick(View v) { 
                myService.StopMp3(""); 
            } 
        }); 
        
    } 
     
     

} 
반응형

'Android' 카테고리의 다른 글

[Thead]자동저장 스레드  (0) 2011.01.24
[Camera] 카메라  (0) 2011.01.24
[etc]이클립스 - 디컴파일러  (0) 2011.01.24
[ AppWidgetProvider / Receiver/Service] 위젯만들기  (0) 2011.01.24
안드로이드 개발환경 셋팅  (0) 2011.01.24