2

良い一日

ウィジェットがあり、ウィジェットを使用して mp3 ファイルを再生および停止したいと考えています。mp3 ファイルは再生できますが、停止できません :(

重要な瞬間 - それはウィジェットです! 問題の理由 - メディア プレーヤーのインスタンスを 1 つだけ使用する方法がわかりません

あなたはなにか考えはありますか?

ここに私のコードがあります

 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);
 }

}

4

3 に答える 3

4

メソッドでローカルに宣言しないでください。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);
 }
}
于 2012-11-05T21:52:34.353 に答える
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);
     }
于 2012-11-06T06:59:23.113 に答える
0

MediaPlayer 変数を静的にするか、サービスから mp3 を再生します。後者はより良い解決策のようです。

于 2012-11-05T21:48:59.677 に答える