2012-11-05 162 views
2

好日子的Android,如何只使用一個MediaPlayer的實例中的Widget

我有一個小窗口,我想發揮和利用我的小部件停止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播放MP。後者似乎是更好的解決方案。

3

根本就不在本地聲明您MediaPlayer的方法,如果它是不是已經空只初始化:

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); 
} 
} 
相關問題