2011-06-08 6 views
33

Я создаю приложение для Android, которое будет транслировать несколько радиостанций из Латинской страны, есть 10 станций, которые, как я знаю, могут быть воспроизведены в андроиде, я получил URL-адрес от них и фактически сделал они работают с помощью этого учебника (ссылка удалена, потому что он умер), но проблема у меня есть, что он играет в течение нескольких секунд, а затем останавливается он держит нагрузку, но не перезапустить потоковые, мои вопросы:Онлайн-приложение для потокового радио для Android

  • Если кто-то работал с этим учебником, может объяснить мне, как заставить его поток постоянно с остановкой.
  • Есть ли более простой способ потокового радио-аудио? этот учебник кажется старым, есть ли новый учебник или новый образец кода для изучения или использования?
  • Может ли кто-нибудь отправить мне правильный путь?

ответ

60

Так что я нашел этот пример, и это работает для меня, вот, если у вас есть один и тот же вопрос:

в myMain.java

import android.app.Activity; 
import android.os.Bundle; 

import java.io.IOException; 

import android.media.MediaPlayer; 
import android.media.MediaPlayer.OnBufferingUpdateListener; 
import android.media.MediaPlayer.OnPreparedListener; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ProgressBar; 

public class myMain extends Activity implements OnClickListener { 

    private ProgressBar playSeekBar; 

    private Button buttonPlay; 

    private Button buttonStopPlay; 

    private MediaPlayer player; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     initializeUIElements(); 

     initializeMediaPlayer(); 
    } 

    private void initializeUIElements() { 

     playSeekBar = (ProgressBar) findViewById(R.id.progressBar1); 
     playSeekBar.setMax(100); 
     playSeekBar.setVisibility(View.INVISIBLE); 

     buttonPlay = (Button) findViewById(R.id.buttonPlay); 
     buttonPlay.setOnClickListener(this); 

     buttonStopPlay = (Button) findViewById(R.id.buttonStopPlay); 
     buttonStopPlay.setEnabled(false); 
     buttonStopPlay.setOnClickListener(this); 

    } 

    public void onClick(View v) { 
     if (v == buttonPlay) { 
      startPlaying(); 
     } else if (v == buttonStopPlay) { 
      stopPlaying(); 
     } 
    } 

    private void startPlaying() { 
     buttonStopPlay.setEnabled(true); 
     buttonPlay.setEnabled(false); 

     playSeekBar.setVisibility(View.VISIBLE); 

     player.prepareAsync(); 

     player.setOnPreparedListener(new OnPreparedListener() { 

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

    } 

    private void stopPlaying() { 
     if (player.isPlaying()) { 
      player.stop(); 
      player.release(); 
      initializeMediaPlayer(); 
     } 

     buttonPlay.setEnabled(true); 
     buttonStopPlay.setEnabled(false); 
     playSeekBar.setVisibility(View.INVISIBLE); 
    } 

    private void initializeMediaPlayer() { 
     player = new MediaPlayer(); 
     try { 
      player.setDataSource("http://usa8-vn.mixstream.net:8138"); 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     player.setOnBufferingUpdateListener(new OnBufferingUpdateListener() { 

      public void onBufferingUpdate(MediaPlayer mp, int percent) { 
       playSeekBar.setSecondaryProgress(percent); 
       Log.i("Buffering", "" + percent); 
      } 
     }); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     if (player.isPlaying()) { 
      player.stop(); 
     } 
    } 
} 

в XML (main.xml) код:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 
<TextView android:layout_width="fill_parent" 
     android:layout_height="wrap_content" android:text="Source: (Radio La Chevere)" 
     android:layout_marginTop="10dip" android:gravity="center" /> 
<ProgressBar android:id="@+id/progressBar1" 
     android:indeterminateOnly="false" android:progressDrawable="@android:drawable/progress_horizontal" 
     android:indeterminateDrawable="@android:drawable/progress_indeterminate_horizontal" 
     android:minHeight="20dip" android:maxHeight="20dip" 
     android:layout_width="fill_parent" android:layout_height="wrap_content" 
     android:layout_marginLeft="20dip" android:layout_marginRight="20dip" 
     android:layout_marginTop="10dip"></ProgressBar> 
<LinearLayout android:id="@+id/linearLayout1" 
     android:layout_height="wrap_content" android:layout_width="match_parent" 
     android:layout_marginTop="20dip" android:gravity="center"> 
     <Button android:text="Play" android:id="@+id/buttonPlay" 
       android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> 
     <Button android:text="Stop" android:id="@+id/buttonStopPlay" 
       android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> 
</LinearLayout> 
</LinearLayout> 

и андроид манифеста:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="package.your.RadioStream" 
    android:versionCode="1" 
    android:versionName="1.0"> 
<uses-sdk android:minSdkVersion="8" /> 
<uses-permission android:name="android.permission.INTERNET"></uses-permission> 

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name=".myMain" 
       android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

</application> 

+0

индикатор выполнения не работает, но вы можете посмотреть, что может быть проблемой? и спасибо, что этот потоковый учебник работает для меня. – UMAR

+0

@zvzej: не могли бы вы рассказать мне, как мы можем передавать, когда источник данных неизвестен? я имею в виду, когда у нас нет url для указания в этой строке 'player.setDataSource (« http://usa8-vn.mixstream.net:8138 »);', поэтому в этом случае, как можно v stream radio..if u know nething, то, пожалуйста, поделитесь .. – Shruti

+0

@Shruti, ну, вы можете просить об этом каждый раз, когда вы открываете приложение с вашего сайта. – zvzej

3

Ну, если вы ожидаете прогресс бар, вы получите disapointing, это поток, который по умолчанию не имеет времени, чтобы положить конец бесконечен. О URL-адресе вы можете использовать точку монтирования на сервере shoutcast2/icecast и/в shoutcast1.

0

В onResume или wrvr вы хотите! Вставьте этот код.

String url = "http://server2.crearradio.com:8371"; // your URL here 
    final MediaPlayer mediaPlayer = new MediaPlayer(); 
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    try { 
     mediaPlayer.setDataSource(url); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    try { 
     mediaPlayer.prepare(); // might take long! (for buffering, etc) 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 

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

В файле manifest.xml добавьте разрешение на доступ в Интернет.

<uses-permission android:name="android.permission.INTERNET"></uses-permission> 
Смежные вопросы