문제

Okay, So I'm working with a SHOUTCast stream for the first time, and I've been told that Android has changed the way it works with audio post-ICS

So, I tried some code that worked very well on 2.3 and 2.2, but when I tried running it on 4.2.2 it didn't play,

Here's my 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 + "%");
    }

}

And my 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>

This works perfectly in Android 2.3, and was made for 2.2, but I can't seem to understand the new audio stuff in 4.0+ so when I run the compiled APK (which i have in Dropbox, signed) I get nothing...

I'm very new to Android programming and any help/insight would be amazing, but be gentle...my understanding of Java is only veeeery basic...

Also, I would like to switch from three buttons to a MediaController, but couldn't find the documentation

도움이 되었습니까?

해결책

Pfft...figures...ran a LogCat on launch, noticed I was missing the Internet permission...

The code is flawless, just needed the one permission and it played like butter on my tablet

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top