2012-11-05 2 views
2

좋은 하루안드로이드는 위젯

에 MediaPlayer를 단 하나의 인스턴스를 사용하는 방법을 나는 위젯을하고 난 게임 내 위젯을 사용하여 MP3 파일을 중지하고 싶습니다. 나는 MP3 파일을 재생할 수 있습니다하지만 난 멈출 수 없다 :(

키 순간을 - 그것은 위젯의 내 문제의 원인을! - 내가

당신을합니까 미디어 플레이어의 한 instanse를 ​​사용하는 방법을 모른다 어떤 아이디어가? 여기

내 코드

public class MyWidget extends AppWidgetProvider { 

    public static String ACTION_WIDGET_RECEIVER = "ActionReceiverWidget"; 
    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
     RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget); 
     Intent active = new Intent(context, HappyBabyWidget.class); 
     active.setAction(ACTION_WIDGET_RECEIVER); 
     PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0); 
     remoteViews.setOnClickPendingIntent(R.id.ButtonPlay, actionPendingIntent); 
     appWidgetManager.updateAppWidget(appWidgetIds, remoteViews); 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     MediaPlayer mp = MediaPlayer.create(context.getApplicationContext(), R.raw.MyMusic); 
     final String action = intent.getAction(); 

     if (ACTION_WIDGET_RECEIVER.equals(action)) { 
      if (mp.isPlaying()) 
       mp.stop(); 
      else 
       mp.start(); 

     } 
     super.onReceive(context, intent); 
} 

}

답변

0

감사는 많은입니다! 여기 은 내 최종 코드입니다.

private static MediaPlayer mp; 

@Override 
    public void onReceive(Context context, Intent intent) 
    { 
     if (mp == null) 
      mp = MediaPlayer.create(context.getApplicationContext(), R.raw.MyMusic); 

     final String action = intent.getAction(); 

     if (ACTION_WIDGET_RECEIVER.equals(action)) { 
      if (mp.isPlaying()) 
      { 
       mp.stop(); 
       mp.release(); 
       mp = MediaPlayer.create(context.getApplicationContext(), R.raw.MyMusic); 

      } 
      else 
       mp.start(); 

     } 
     super.onReceive(context, intent); 
} 
} 
      super.onReceive(context, intent); 
    } 
0

가 어느 당신이 당신의 MediaPlayer를 변수 정적 만들거나 당신은 0에서 MP3를 재생. 후자가 더 나은 해결책 인 것 같습니다.

3

간단히하는 방법에 로컬 MediaPlayer을 선언하지 않으며, 이미 null가 아닌 경우에만 초기화 :

public class MyWidget extends AppWidgetProvider { 

    public static String ACTION_WIDGET_RECEIVER = "ActionReceiverWidget"; 
    private MediaPlayer mp; 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
     RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget); 
     Intent active = new Intent(context, HappyBabyWidget.class); 
     active.setAction(ACTION_WIDGET_RECEIVER); 
     PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0); 
     remoteViews.setOnClickPendingIntent(R.id.ButtonPlay, actionPendingIntent); 
     appWidgetManager.updateAppWidget(appWidgetIds, remoteViews); 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     if (mp == null) 
      mp = MediaPlayer.create(context.getApplicationContext(), R.raw.MyMusic); 
     final String action = intent.getAction(); 

     if (ACTION_WIDGET_RECEIVER.equals(action)) { 
      if (mp.isPlaying()) 
       mp.stop(); 
      else 
       mp.start(); 

     } 
     super.onReceive(context, intent); 
} 
}