Autore Topic: Web Radio Streaming help!!!  (Letto 442 volte)

Offline StefanoAl

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy sII
  • Sistema operativo:
    android 4.1.2
Web Radio Streaming help!!!
« il: 09 Febbraio 2015, 00:38:53 CET »
0
Salve a tutti, sto da poco sviluppando un widget con 2 bottoni (play-pausa) che permettano di far partire e di stoppare lo streaming di una radio online. Il widget funziona in parte: la musica parte e si sente ma il problema è che non riesco a fermarla!!! Il bottone sembra funzionare ma non ferma la musica. A quanto pare il widget crea un nuovo MediaPlayer ogni qual volta riceva la pressione del bottone play rendendo così impossibile fermarlo. Infatti ogni volta che si preme play, parte un nuovo streaming che si sovrappone al precedente rendendo inascoltabile lo streaming della radio.
Avete per caso soluzioni? Esiste un modo per fermare tutta la musica in riproduzione?
Questo è il codice di Zoo.java :
Codice (Java): [Seleziona]
package com.zoowidget;

import java.io.IOException;
import java.util.Arrays;

import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.RemoteViews;
import android.widget.Toast;

public class Zoo extends AppWidgetProvider implements OnClickListener {
    private MediaPlayer player;
   
        public static String ACTION_WIDGET_RECEIVER = "ActionReceiverWidget";
    public static String ACTION_WIDGET_CLICK = "ActionWidgetClick";

        @Override
         public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
                    final int N = appWidgetIds.length;
             
                    Log.i("Zoo",  "Updating widgets " + Arrays.asList(appWidgetIds));
                 
                    // Perform this loop procedure for each App Widget that belongs to this
                    // provider
                    for (int i = 0; i < N; i++) {
                      int appWidgetId = appWidgetIds[i];
      //SCELGO IL LAYOUT DEL WIDGET
          RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
          //BOTTONE PLAY (1)
          Intent active = new Intent(context, Zoo.class);
          active.setAction(ACTION_WIDGET_RECEIVER);
          PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0);
          remoteViews.setOnClickPendingIntent(R.id.button1, actionPendingIntent);
          //BOTTONE PAUSA (2)
          Intent bactive = new Intent(context, Zoo.class);
          bactive.setAction(ACTION_WIDGET_CLICK);
          PendingIntent bactionPendingIntent = PendingIntent.getBroadcast(context, 1, bactive, 0);
          remoteViews.setOnClickPendingIntent(R.id.button2, bactionPendingIntent);
      //UPDATE WIDGET
          appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
         }}
       
         @Override
         public void onReceive(Context context, Intent intent) {
          // v1.5 fix that doesn't call onDelete Action
          final String action = intent.getAction();
          if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) {
           //The widget is being deleted off the desktop
           final int appWidgetId = intent.getExtras().getInt(
             AppWidgetManager.EXTRA_APPWIDGET_ID,
             AppWidgetManager.INVALID_APPWIDGET_ID);
           if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) {
            this.onDeleted(context, new int[] { appWidgetId });
           }
          } else {
          initializeMediaPlayer();

           // check, if our Action was called
           if (intent.getAction().equals(ACTION_WIDGET_RECEIVER)) {
                   
                startPlaying();
                   
           Toast.makeText(context, "ON AIR", Toast.LENGTH_SHORT)
           .show();
           
           } else if (intent.getAction().equals(ACTION_WIDGET_CLICK)) {
         
                   player.stop();
                   player.release();
           Toast.makeText(context, "OFF AIR", Toast.LENGTH_SHORT)
           .show();      
       
           }
           
           super.onReceive(context, intent);
          }}
         
        @Override
        public void onClick(View v) {
                // TODO Auto-generated method stub
    }

        //NON USED
    private void stopPlaying() {

       
                player.stop();
           
               
    }
   
    private void startPlaying() {
        player.prepareAsync();
        player.setOnPreparedListener(new OnPreparedListener() {

            public void onPrepared(MediaPlayer mp) {
                player.start();
            }
        });

    }

    private void initializeMediaPlayer() {
        player = new MediaPlayer();
        try {
            player.setDataSource("http://shoutcast.unitedradio.it:1101");
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
      }
}
         
         


EDIT:
Risolto spostando il media player in un service e richiamandolo dal widget.
« Ultima modifica: 13 Febbraio 2015, 13:45:25 CET da StefanoAl »