반응형
* 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 |