0

好的,所以我第一次使用SHOUTCast流,並且我被告知Android已經改變了它與音頻後處理的方式-ICSSHOUTCast Streaming Breaks in 4.0+,working in 2.3

所以,我嘗試了一些代碼,工作非常出色的2.3和2.2,但是當我試圖在4.2.2運行它,它沒有發揮,

這裏是我的MainActivity.java

package com.mooo.ajbiz11.ponyfeather; 

import android.app.Activity; 
import android.media.AudioManager; 
import android.media.MediaPlayer; 
import android.net.Uri; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 

public class MainActivity extends Activity implements 
     MediaPlayer.OnCompletionListener, MediaPlayer.OnPreparedListener, 
     MediaPlayer.OnErrorListener, MediaPlayer.OnBufferingUpdateListener { 

    private String TAG = getClass().getSimpleName(); 
    private MediaPlayer mp = null; 

    private Button play; 
    private Button pause; 
    private Button stop; 

    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.activity_main); 

     play = (Button) findViewById(R.id.play); 
     pause = (Button) findViewById(R.id.pause); 
     stop = (Button) findViewById(R.id.stop); 

     play.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 
       play(); 
      } 
     }); 

     pause.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 
       pause(); 
      } 
     }); 

     stop.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 
       stop(); 
      } 
     }); 
    } 

    private void play() { 
     Uri myUri = Uri.parse("http://radio.ponyvillelive.com:8026/stream"); 
     try { 
      if (mp == null) { 
       this.mp = new MediaPlayer(); 
      } else { 
       mp.stop(); 
       mp.reset(); 
      } 
      mp.setDataSource(this, myUri); // Go to Initialized state 
      mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 
      mp.setOnPreparedListener(this); 
      mp.setOnBufferingUpdateListener(this); 

      mp.setOnErrorListener(this); 
      mp.prepareAsync(); 

      Log.d(TAG, "LoadClip Done"); 
     } catch (Throwable t) { 
      Log.d(TAG, t.toString()); 
     } 
    } 

    @Override 
    public void onPrepared(MediaPlayer mp) { 
     Log.d(TAG, "Stream is prepared"); 
     mp.start(); 
    } 

    private void pause() { 
     mp.pause(); 
    } 

    private void stop() { 
     mp.stop(); 

    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     stop(); 

    } 

    public void onCompletion(MediaPlayer mp) { 
     stop(); 
    } 

    public boolean onError(MediaPlayer mp, int what, int extra) { 
     StringBuilder sb = new StringBuilder(); 
     sb.append("Media Player Error: "); 
     switch (what) { 
      case MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK: 
       sb.append("Not Valid for Progressive Playback"); 
       break; 
      case MediaPlayer.MEDIA_ERROR_SERVER_DIED: 
       sb.append("Server Died"); 
       break; 
      case MediaPlayer.MEDIA_ERROR_UNKNOWN: 
       sb.append("Unknown"); 
       break; 
      default: 
       sb.append(" Non standard ("); 
       sb.append(what); 
       sb.append(")"); 
     } 
     sb.append(" (" + what + ") "); 
     sb.append(extra); 
     Log.e(TAG, sb.toString()); 
     return true; 
    } 

    public void onBufferingUpdate(MediaPlayer mp, int percent) { 
     Log.d(TAG, "PlayerService onBufferingUpdate : " + percent + "%"); 
    } 

} 

而且我的activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

    <RelativeLayout 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"> 

     <Button 
       android:text="Pause" 
       android:id="@+id/pause" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="right|bottom" 
       android:layout_row="3" 
       android:layout_column="9" 
       android:layout_marginBottom="124dp" 
       android:layout_alignParentBottom="true" 
       android:layout_centerHorizontal="true"></Button> 

     <Button 
       android:text="Stop" 
       android:id="@+id/stop" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       style="@style/AppTheme" 
       android:layout_gravity="center_horizontal|bottom" 
       android:layout_row="2" 
       android:layout_column="15" 
       android:layout_alignTop="@+id/pause" 
       android:layout_toRightOf="@+id/pause"></Button> 

     <Button 
       android:text="Play" 
       android:id="@+id/play" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_horizontal|bottom" 
       android:layout_row="5" 
       android:layout_column="11" 
       android:layout_alignTop="@+id/pause" 
       android:layout_toLeftOf="@+id/pause"></Button> 

    </RelativeLayout> 

</LinearLayout> 

這在Android 2.3中完美的工作,併爲2.2,但我似乎無法理解4.0+的新音頻的東西,所以當我運行編譯APK(我有Dropbox,簽名)我得到什麼...

我很新到Android編程和任何幫助/洞察力將是驚人的,但要溫柔......我的Java的理解僅僅是veeeery基本...

另外,我想喜歡從三個按鈕切換到MediaController,但找不到文檔

回答

0

Pfft ...數字...啓動時運行LogCat,注意到我wa s缺少互聯網許可...

代碼是完美的,只需要一個權限,它在我的平板電腦上播放像黃油一樣